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 相关文章推荐
只需20行代码就可以写出CSS覆盖率测试脚本
Apr 24 Javascript
node.js中的fs.writeFile方法使用说明
Dec 14 Javascript
jscript读写二进制文件的方法
Apr 22 Javascript
基于Jquery和html5的7款个性化地图插件
Nov 17 Javascript
JS检测移动端横竖屏的代码
May 30 Javascript
js实现数组和对象的深浅拷贝
Sep 30 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
Sep 30 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
Apr 24 Javascript
layui多iframe页面控制定时器运行的方法
Sep 05 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
Dec 17 Javascript
vue页面更新patch的实现示例
Mar 25 Javascript
js实现简易点击切换显示或隐藏
Nov 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语法速查表
2007/01/02 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
JavaScript中Function详解
2015/02/27 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Python中处理unchecked未捕获异常实例
2015/01/17 Python
为Python的web框架编写前端模版的教程
2015/04/30 Python
Python写的一个简单监控系统
2015/06/19 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
Python气泡提示与标签的实现
2020/04/01 Python
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
实习单位推荐信范文
2013/11/27 职场文书
元旦晚会邀请函
2014/02/01 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
社区反邪教工作方案
2014/06/16 职场文书
最新离婚协议书范本
2014/08/19 职场文书
工作失误检讨书范文
2015/01/26 职场文书
大学生求职意向书
2015/05/11 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python