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 相关文章推荐
jquery $.each 和for怎么跳出循环终止本次循环
Sep 27 Javascript
jQuery.fn和jQuery.prototype区别介绍
Oct 05 Javascript
AJAX跨域请求json数据的实现方法
Nov 11 Javascript
JS中数组Array的用法示例介绍
Feb 20 Javascript
jQuery中unbind()方法用法实例
Jan 19 Javascript
完美实现bootstrap分页查询
Dec 09 Javascript
JQuery解析XML的方法小结
Apr 02 Javascript
jQuery实现的自动加载页面功能示例
Sep 04 Javascript
angular和BootStrap3实现购物车功能
Jan 25 Javascript
JS实现的合并两个有序链表算法示例
Feb 25 Javascript
vue+egg+jwt实现登录验证的示例代码
May 18 Javascript
Vue修改项目启动端口号方法
Nov 07 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
VOLVO车载收音机
2021/03/02 无线电
php读取xml实例代码
2010/01/28 PHP
PHP 面向对象 final类与final方法
2010/05/05 PHP
php for 循环使用的简单实例
2016/06/02 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
php swoft框架实例用法
2020/12/22 PHP
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
学习Vue组件实例
2018/04/28 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
python 输出一个两行字符的变量
2009/02/05 Python
Django实现组合搜索的方法示例
2018/01/23 Python
Python如何发布程序的详细教程
2018/10/09 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
python实现广度优先搜索过程解析
2019/10/19 Python
django框架中间件原理与用法详解
2019/12/10 Python
python实现查找所有程序的安装信息
2020/02/18 Python
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
企业文化理念标语
2014/06/10 职场文书
法人授权委托书样本
2014/09/19 职场文书
公司搬迁通知
2015/04/20 职场文书
高中运动会广播稿
2015/08/19 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python