jquery实现拖拽调整Div大小


Posted in Javascript onJanuary 30, 2015

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

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

(function ($) {

    $.fn.dragDivResize = function () {

        var deltaX, deltaY, _startX, _startY;

        var resizeW, resizeH;

        var size = 20;

        var minSize = 10;

        var scroll = getScrollOffsets();

        var _this = this;

        for (var i = 0; i < _this.length; i++) {

            var target = this[i];

            $(target).on("mouseover mousemove", overHandler);

        }

        function outHandler() {

            for (var i = 0; i < _this.length; i++) {

                target.style.outline = "none";

            }

            document.body.style.cursor = "default";

        }

        function overHandler(event) {

            target = event.target || event.srcElement;

            var startX = event.clientX + scroll.x;

            var startY = event.clientY + scroll.y;

            var w = $(target).width();

            var h = $(target).height();

            _startX = parseInt(startX);

            _startY = parseInt(startY);

            if ((0 < target.offsetLeft + w - _startX && target.offsetLeft + w - _startX < size) || (0 < target.offsetTop + h - _startY && target.offsetTop + h - _startY < size)) {

                target.style.outline = "2px dashed #333";

                if ((0 > target.offsetLeft + w - _startX || target.offsetLeft + w - _startX > size) && 0 < target.offsetTop + h - _startY && target.offsetTop + h - _startY < size) {

                    resizeW = false;

                    resizeH = true;

                    document.body.style.cursor = "s-resize";

                }

                if (0 < target.offsetLeft + w - _startX && target.offsetLeft + w - _startX < size && (0 > target.offsetTop + h - _startY || target.offsetTop + h - _startY > size)) {

                    resizeW = true;

                    resizeH = false;

                    document.body.style.cursor = "w-resize";

                }

                if (0 < target.offsetLeft + w - _startX && target.offsetLeft + w - _startX < size && 0 < target.offsetTop + h - _startY && target.offsetTop + h - _startY < size) {

                    resizeW = true;

                    resizeH = true;

                    document.body.style.cursor = "se-resize";

                }

                $(target).on('mousedown', downHandler);

            } else {

                resizeW = false;

                resizeH = false;

                $(target).off('mousedown', downHandler);

            }

        }

        function downHandler(event) {

            target = event.target || event.srcElement;

            var startX = event.clientX + scroll.x;

            var startY = event.clientY + scroll.y;

            _startX = parseInt(startX);

            _startY = parseInt(startY);

            if (document.addEventListener) {

                document.addEventListener("mousemove", moveHandler, true);

                document.addEventListener("mouseup", upHandler, true);

            } else if (document.attachEvent) {

                target.setCapture();

                target.attachEvent("onlosecapeture", upHandler);

                target.attachEvent("onmouseup", upHandler);

                target.attachEvent("onmousemove", moveHandler);

            }

            if (event.stopPropagation) {

                event.stopPropagation();

            } else {

                event.cancelBubble = true;

            }

            if (event.preventDefault) {

                event.preventDefault();

            } else {

                event.returnValue = false;

            }

        }

        function moveHandler(e) {

            if (!e) e = window.event;

            var w, h;

            var startX = parseInt(e.clientX + scroll.x);

            var startY = parseInt(e.clientY + scroll.y);

            target = target || e.target || e.srcElement;

            if (target == document.body) {

                return;

            }

            if (resizeW) {

                deltaX = startX - _startX;

                w = $(target).width() + deltaX < minSize ? minSize : $(target).width() + deltaX;

                target.style.width = w + "px";

                _startX = startX;

            }

            if (resizeH) {

                deltaY = startY - _startY;

                h = $(target).height() + deltaY < minSize ? minSize : $(target).height() + deltaY;

                target.style.height = h + "px";

                _startY = startY;

            }

            if (e.stopPropagation) {

                e.stopPropagation();

            } else {

                e.cancelBubble = true;

            }

        }

        function upHandler(e) {

            if (!e) {

                e = window.event;

            }

            resizeW = false;

            resizeH = false;

            target = e.target || e.srcElement;

            $(target).on("mouseout", outHandler);

            if (document.removeEventListener) {

                document.removeEventListener("mousemove", moveHandler, true);

                document.removeEventListener("mouseup", upHandler, true);

            } else if (document.detachEvent) {

                target.detachEvent("onlosecapeture", upHandler);

                target.detachEvent("onmouseup", upHandler);

                target.detachEvent("onmousemove", moveHandler);

                target.releaseCapture();

            }

            if (e.stopPropagation) {

                e.stopPropagation();

            } else {

                e.cancelBubble = true;

            }

        }

        function getScrollOffsets(w) {

            w = w || window;

            if (w.pageXOffset != null) {

                return { x: w.pageXOffset, y: w.pageYOffset };

            }

            var d = w.document;

            if (document.compatMode == "CSS1Compat") {

                return { x: d.documentElement.scrollLeft, y: d.documentElement.scrollTop };

            }

            return { x: d.body.scrollLeft, y: d.body.scrollTop };

        }

    }

}(jQuery));

jQuery("div").dragDivResize();

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

以上就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
在b/s开发中经常用到的javaScript技术
Aug 23 Javascript
JQuery实现可直接编辑的表格
Apr 16 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
Jul 06 Javascript
js创建数组的简单方法
Jul 27 Javascript
JS添加或修改控件的样式(Class)实现方法
Oct 15 Javascript
浅谈javascript中执行环境(作用域)与作用域链
Dec 08 Javascript
ES6新特性之函数的扩展实例详解
Apr 01 Javascript
JS实现上传图片实时预览功能
May 22 Javascript
vue插件vue-resource的使用笔记(小结)
Aug 04 Javascript
React复制到剪贴板的示例代码
Aug 22 Javascript
Vue路由之JWT身份认证的实现方法
Aug 26 Javascript
JS实现手写 forEach算法示例
Apr 29 Javascript
jQuery中$.click()无效问题分析
Jan 29 #Javascript
Eclipse配置Javascript开发环境图文教程
Jan 29 #Javascript
js操作滚动条事件实例
Jan 29 #Javascript
jQuery调取jSon数据并展示的方法
Jan 29 #Javascript
jquery通过load获取文件的内容并跳到锚点的方法
Jan 29 #Javascript
浅谈Javascript 数组与字典
Jan 29 #Javascript
javascript 数组操作详解
Jan 29 #Javascript
You might like
PHP 压缩文件夹的类代码
2009/11/05 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
react native 获取地理位置的方法示例
2018/08/28 Javascript
npm的lock机制解析
2019/06/20 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
pymongo中group by的操作方法教程
2019/03/22 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
详解python中__name__的意义以及作用
2019/08/07 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
程序员经常用到的UNIX命令
2015/04/13 面试题
交通志愿者活动总结
2014/06/27 职场文书
不错的求职信范文
2014/07/20 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
降价通知函
2015/04/23 职场文书
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python