你的位置:首页 > Java教程

[Java教程]拖拽改变div的大小


拖拽改变div的大小

 1 <!DOCTYPE html> 2 <html> 3  4   <head> 5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6     <title>Resize</title> 7     <style type="text/css"> 8       #rRightDown, 9       #rLeftDown, 10       #rLeftUp, 11       #rRightUp, 12       #rRight, 13       #rLeft, 14       #rUp, 15       #rDown { 16         position: absolute; 17         background: #C00; 18         width: 6px; 19         height: 6px; 20         z-index: 5; 21         font-size: 0; 22       } 23        24       #rRight { 25         width: 15px 26       } 27        28       #rLeftDown, 29       #rRightUp { 30         cursor: ne-resize; 31       } 32        33       #rRightDown, 34       #rLeftUp { 35         cursor: nw-resize; 36       } 37        38       #rRight, 39       #rLeft { 40         cursor: e-resize; 41       } 42        43       #rUp, 44       #rDown { 45         cursor: n-resize; 46       } 47        48       #rRightDown { 49         bottom: -3px; 50         right: -3px; 51       } 52        53       #rLeftDown { 54         bottom: -3px; 55         left: -3px; 56       } 57        58       #rRightUp { 59         top: -3px; 60         right: -3px; 61       } 62        63       #rLeftUp { 64         top: -3px; 65         left: -3px; 66       } 67        68       #rRight { 69         right: -3px; 70         top: 50% 71       } 72        73       #rLeft { 74         left: -3px; 75         top: 50% 76       } 77        78       #rUp { 79         top: -3px; 80         left: 50% 81       } 82        83       #rDown { 84         bottom: -3px; 85         left: 50% 86       } 87     </style> 88   </head> 89  90   <body> 91     <div id='ss' style="height:100px; width:100px; border:1px solid #000000; position:absolute; left:200px; top:200px;"> 92       <div id="rRightDown"> </div> 93       <div id="rLeftDown"> </div> 94       <div id="rRightUp"> </div> 95       <div id="rLeftUp"> </div> 96       <div id="rRight"> </div> 97       <div id="rLeft"> </div> 98       <div id="rUp"> </div> 99       <div id="rDown"></div>100     </div>101     <script>102       var Sys = (function(ua) {103         var s = {};104         s.IE = ua.match(/msie ([\d.]+)/) ? true : false;105         s.Firefox = ua.match(/firefox\/([\d.]+)/) ? true : false;106         s.Chrome = ua.match(/chrome\/([\d.]+)/) ? true : false;107         s.IE6 = (s.IE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 6)) ? true : false;108         s.IE7 = (s.IE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 7)) ? true : false;109         s.IE8 = (s.IE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 8)) ? true : false;110         return s;111       })(navigator.userAgent.toLowerCase()); /*判断是哪一种浏览器,火狐,谷歌,ie*/112       var $ = function(id) {113         return document.getElementById(id);114       }; /*获取元素,模仿jQuery*/115       var Css = function(e, o) { /*更改对象的top,left,width,height来控制对象的大小*/116         for(var i in o)117           e.style[i] = o[i];118       };119       var Extend = function(destination, source) { /*拷贝对象的属性*/120         for(var property in source) {121           destination[property] = source[property];122         }123       };124       /*直接调用方法*/125       var Bind = function(object, fun) {126         var args = Array.prototype.slice.call(arguments).slice(2);127         return function() {128           return fun.apply(object, args);129         }130       };131       /*直接调用方法,并将事件的类型传入作为第一个参数*/132       var BindAsEventListener = function(object, fun) {133         var args = Array.prototype.slice.call(arguments).slice(2);134         return function(event) {135           return fun.apply(object, [event || window.event].concat(args));136         }137       };138       /*获取当前元素的属性*/139       var CurrentStyle = function(element) {140         return element.currentStyle || document.defaultView.getComputedStyle(element, null);141       };142       /*事件监听,执行对应的函数*/143       function addListener(element, e, fn) {144         element.addEventListener ? element.addEventListener(e, fn, false) : element.attachEvent("on" + e, fn);145       };146       /*事件的移除*/147       function removeListener(element, e, fn) {148         element.removeEventListener ? element.removeEventListener(e, fn, false) : element.detachEvent("on" + e, fn)149       };150       /*创建一个新的可以拖拽的,变换大小的对象*/151       var Class = function(properties) {152         var _class = function() {153           return(arguments[0] !== null && this.initialize && typeof(this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this;154         };155         _class.prototype = properties;156         return _class;157       };158       var Resize = new Class({159         initialize: function(obj) {160           this.obj = obj;161           this.resizeelm = null;162           this.fun = null; //记录触发什么事件的索引  163           this.original = []; //记录开始状态的数组  164           this.width = null;165           this.height = null;166           this.fR = BindAsEventListener(this, this.resize); /*拖拽去更改div的大小*/167           this.fS = Bind(this, this.stop); /*停止移除监听的事件*/168         },169         set: function(elm, direction) {170           if(!elm) return;171           this.resizeelm = elm;172           /*点击事件的监听,调用start函数去初始化数据,监听mousemove和mouseup,这两个事件,当mouseover的时候,去更改div的大小,当mouseup,去清除之前监听的两个事件*/173           addListener(this.resizeelm, 'mousedown', BindAsEventListener(this, this.start, this[direction]));174           return this;175         },176         start: function(e, fun) {177           this.fun = fun;178           this.original = [parseInt(CurrentStyle(this.obj).width), parseInt(CurrentStyle(this.obj).height), parseInt(CurrentStyle(this.obj).left), parseInt(CurrentStyle(this.obj).top)];179           console.log({180             width: this.original[0],181             height: this.original[1],182             left: this.original[2],183             top: this.original[3]184           });185           this.width = (this.original[2] || 0) + this.original[0];186           this.height = (this.original[3] || 0) + this.original[1];187           addListener(document, "mousemove", this.fR);188           addListener(document, 'mouseup', this.fS);189         },190         resize: function(e) {191           this.fun(e);192           /*失去焦点的时候,调用this.stop去清除监听事件*/193           Sys.IE ? (this.resizeelm.onlosecapture = function() {194             this.fS();195           }) : (this.resizeelm.onblur = function() {196             this.fS();197           })198         },199         stop: function() {200           removeListener(document, "mousemove", this.fR);201           removeListener(document, "mousemove", this.fS);202           window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); /**清除选中的内容*/203         },204         up: function(e) {205           this.height > e.clientY ? Css(this.obj, {206             top: e.clientY + "px",207             height: this.height - e.clientY + "px"208           }) : this.turnDown(e);209         },210         down: function(e) {211           e.clientY > this.original[3] ? Css(this.obj, {212             top: this.original[3] + 'px',213             height: e.clientY - this.original[3] + 'px'214           }) : this.turnUp(e);215         },216         left: function(e) {217           e.clientX < this.width ? Css(this.obj, {218             left: e.clientX + 'px',219             width: this.width - e.clientX + "px"220           }) : this.turnRight(e);221         },222         right: function(e) {223           e.clientX > this.original[2] ? Css(this.obj, {224             left: this.original[2] + 'px',225             width: e.clientX - this.original[2] + "px"226           }) : this.turnLeft(e);227         },228         leftUp: function(e) {229           this.up(e);230           this.left(e);231         },232         leftDown: function(e) {233           this.left(e);234           this.down(e);235         },236         rightUp: function(e) {237           this.up(e);238           this.right(e);239         },240         rightDown: function(e) {241           this.right(e);242           this.down(e);243         },244         turnDown: function(e) {245           Css(this.obj, {246             top: this.height + 'px',247             height: e.clientY - this.height + 'px'248           });249         },250         turnUp: function(e) {251           Css(this.obj, {252             top: e.clientY + 'px',253             height: this.original[3] - e.clientY + 'px'254           });255         },256         turnRight: function(e) {257           Css(this.obj, {258             left: this.width + 'px',259             width: e.clientX - this.width + 'px'260           });261         },262         turnLeft: function(e) {263           Css(this.obj, {264             left: e.clientX + 'px',265             width: this.original[2] - e.clientX + 'px'266           });267         }268       });269       window.onload = function() {270         new Resize($('ss')).set($('rUp'), 'up').set($('rDown'), 'down').set($('rLeft'), 'left').set($('rRight'), 'right').set($('rLeftUp'), 'leftUp').set($('rLeftDown'), 'leftDown').set($('rRightDown'), 'rightDown').set($('rRightUp'), 'rightUp');271       }272     </script>273   </body>274 275 </html>

转自:http://blog.csdn.net/w329636271/article/details/50696121