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 相关文章推荐
用 JSON 处理缓存
Apr 27 Javascript
Javascript 兼容firefox的一些问题
May 21 Javascript
JS 有名函数表达式全面解析
Mar 19 Javascript
extjs之去除s.gif的影响
Dec 25 Javascript
javascript基础知识大集锦(一) 推荐收藏
Jan 13 Javascript
jquery ajax同步异步的执行最终解决方案
Apr 26 Javascript
页面实时更新时间的JS实例代码
Dec 18 Javascript
Javascript单元测试框架QUnitjs详细介绍
May 08 Javascript
Javascript实现时间倒计时效果
Jul 15 Javascript
vue中,在本地缓存中读写数据的方法
Sep 21 Javascript
详解vue2.6插槽更新v-slot用法总结
Mar 09 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
Oct 31 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版(4)
2006/10/09 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
详解js的六大数据类型
2016/12/27 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
python如何实现word批量转HTML
2020/09/30 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
技术学校毕业生求职信分享
2013/12/02 职场文书
物业保安主管岗位职责
2013/12/25 职场文书
小学开学标语
2014/07/01 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers