首页 > 代码库 > 拖拽调整Div大小

拖拽调整Div大小

今天写了一天这个jquery插件:

可以实现对div进行拖拽来调整大小的功能。

技术分享
  1 (function ($) {  2     $.fn.dragDivResize = function () {  3         var deltaX, deltaY, _startX, _startY;  4         var resizeW, resizeH;  5         var size = 20;  6         var minSize = 10;  7         var scroll = getScrollOffsets();  8         var _this = this;  9  10         for (var i = 0; i < _this.length; i++) { 11             var target = this[i]; 12             $(target).on("mouseover mousemove", overHandler); 13         } 14         function outHandler() { 15             for (var i = 0; i < _this.length; i++) { 16                 target.style.outline = "none"; 17             } 18             document.body.style.cursor = "default"; 19         } 20  21         function overHandler(event) { 22             target = event.target || event.srcElement; 23             var startX = event.clientX + scroll.x; 24             var startY = event.clientY + scroll.y; 25             var w = $(target).width(); 26             var h = $(target).height(); 27             _startX = parseInt(startX); 28             _startY = parseInt(startY); 29             if ((0 < target.offsetLeft + w - _startX && target.offsetLeft + w - _startX < size) || (0 < target.offsetTop + h - _startY && target.offsetTop + h - _startY < size)) { 30                 target.style.outline = "2px dashed #333"; 31                 if ((0 > target.offsetLeft + w - _startX || target.offsetLeft + w - _startX > size) && 0 < target.offsetTop + h - _startY && target.offsetTop + h - _startY < size) { 32                     resizeW = false; 33                     resizeH = true; 34                     document.body.style.cursor = "s-resize"; 35                 } 36                 if (0 < target.offsetLeft + w - _startX && target.offsetLeft + w - _startX < size && (0 > target.offsetTop + h - _startY || target.offsetTop + h - _startY > size)) { 37                     resizeW = true; 38                     resizeH = false; 39                     document.body.style.cursor = "w-resize"; 40                 } 41                 if (0 < target.offsetLeft + w - _startX && target.offsetLeft + w - _startX < size && 0 < target.offsetTop + h - _startY && target.offsetTop + h - _startY < size) { 42                     resizeW = true; 43                     resizeH = true; 44                     document.body.style.cursor = "se-resize"; 45                 } 46                 $(target).on(‘mousedown‘, downHandler); 47             } else { 48                 resizeW = false; 49                 resizeH = false; 50                 $(target).off(‘mousedown‘, downHandler); 51             } 52         } 53  54         function downHandler(event) { 55             target = event.target || event.srcElement; 56             var startX = event.clientX + scroll.x; 57             var startY = event.clientY + scroll.y; 58             _startX = parseInt(startX); 59             _startY = parseInt(startY); 60             if (document.addEventListener) { 61                 document.addEventListener("mousemove", moveHandler, true); 62                 document.addEventListener("mouseup", upHandler, true); 63             } else if (document.attachEvent) { 64                 target.setCapture(); 65                 target.attachEvent("onlosecapeture", upHandler); 66                 target.attachEvent("onmouseup", upHandler); 67                 target.attachEvent("onmousemove", moveHandler); 68             } 69             if (event.stopPropagation) { 70                 event.stopPropagation(); 71             } else { 72                 event.cancelBubble = true; 73             } 74             if (event.preventDefault) { 75                 event.preventDefault(); 76             } else { 77                 event.returnValue = http://www.mamicode.com/false; 78             } 79         } 80  81         function moveHandler(e) { 82             if (!e) e = window.event; 83             var w, h; 84             var startX = parseInt(e.clientX + scroll.x); 85             var startY = parseInt(e.clientY + scroll.y); 86             target = target || e.target || e.srcElement; 87             if (target == document.body) { 88                 return; 89             } 90             if (resizeW) { 91                 deltaX = startX - _startX; 92                 w = $(target).width() + deltaX < minSize ? minSize : $(target).width() + deltaX; 93                 target.style.width = w + "px"; 94                 _startX = startX; 95             } 96             if (resizeH) { 97                 deltaY = startY - _startY; 98                 h = $(target).height() + deltaY < minSize ? minSize : $(target).height() + deltaY; 99                 target.style.height = h + "px";100                 _startY = startY;101             }102             if (e.stopPropagation) {103                 e.stopPropagation();104             } else {105                 e.cancelBubble = true;106             }107         }108 109         function upHandler(e) {110             if (!e) {111                 e = window.event;112             }113             resizeW = false;114             resizeH = false;115             target = e.target || e.srcElement;116             $(target).on("mouseout", outHandler);117             if (document.removeEventListener) {118                 document.removeEventListener("mousemove", moveHandler, true);119                 document.removeEventListener("mouseup", upHandler, true);120             } else if (document.detachEvent) {121                 target.detachEvent("onlosecapeture", upHandler);122                 target.detachEvent("onmouseup", upHandler);123                 target.detachEvent("onmousemove", moveHandler);124                 target.releaseCapture();125             }126             if (e.stopPropagation) {127                 e.stopPropagation();128             } else {129                 e.cancelBubble = true;130             }131         }132 133         function getScrollOffsets(w) {134             w = w || window;135             if (w.pageXOffset != null) {136                 return { x: w.pageXOffset, y: w.pageYOffset };137             }138             var d = w.document;139             if (document.compatMode == "CSS1Compat") {140                 return { x: d.documentElement.scrollLeft, y: d.documentElement.scrollTop };141             }142             return { x: d.body.scrollLeft, y: d.body.scrollTop };143         }144     }145 }(jQuery));146 147 jQuery("div").dragDivResize();
View Code

 记录一下今天的劳动成果,可能会有很多不成熟的地方,欢迎大家来指正,谢谢!

拖拽调整Div大小