使用js实现的简单拖拽效果


Posted in Javascript onMarch 18, 2015

前端开发的时候,有好多地方用到拖拽效果,当然 http://jqueryui.com/draggable/  是个不错的选择,but 我是个打破砂锅问到底的人,抽点时间用js小小的实现了类似的插件,话不多说。

 first: html和css

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title></title>

    <style>

        * {

            margin: 0;

            padding: 0;

        }

        #div1 {

            position: absolute;

            width: 100px;

            height: 100px;

            cursor: move;

            background-color: red;

        }

    </style>

</head>

<body>

    <div id="div1">

    </div>

</body>

</html>

使用js实现的简单拖拽效果

now,先把主要算法实现一下:

 <script>

        window.onload = function () {

            //获取需要拖拽的div

            var div1 = document.getElementById("div1");

            //添加鼠标按下事件

            div1.onmousedown = function (evt) {

                var oEvent = evt || event;

                //获取按下鼠标到div left  top的距离

                var distanceX = oEvent.clientX - div1.offsetLeft;

                var distanceY = oEvent.clientX - div1.offsetTop;

                //添加doc滑动时间

                document.onmousemove = function (evt) {

                    var oEvent = evt || event;

                    //重新计算div的left top值

                    var left = oEvent.clientX - distanceX;

                    var top = oEvent.clientY - distanceY;

                    //left  当小于等于零时,设置为零 防止div拖出document之外

                    if (left <= 0) {

                        left = 0;

                    }

                    //当left 超过文档右边界  设置为右边界

                    else if (left >= document.documentElement.clientWidth - div1.offsetWidth) {

                        left = document.documentElement.clientWidth - div1.offsetWidth;

                    }

                    if (top <= 0) {

                        top = 0;

                    }

                    else if (top >= document.documentElement.clientHeight - div1.offsetHeight) {

                        top = document.documentElement.clientHeight - div1.offsetHeight;

                    }

                    //重新给div赋值

                    div1.style.top = top + "px";

                    div1.style.left = left + "px";

                }

                //添加鼠标抬起事件

                div1.onmouseup = function () {

                    //清空事件

                    document.onmousemove = null;

                    div1.onmouseup = null;

                }

            }

        }

    </script>

yeah,使用面向对象实现一下

<style>

        * {

            margin:0;

            padding:0;

        }

        #div1 {

            width: 100px;

            height: 100px;

            background-color: red;

        }

        #div2 {

            background-color:yellow;

            width:100px;

            height:100px;

        }

    </style>

<div id="div1"></div>

<div id="div2"></div>

js Draggle class:

 function Drag(id) {

            this.div = document.getElementById(id);

            if (this.div) {

                this.div.style.cursor = "move";

                this.div.style.position = "absolute";

            }

            this.disX = 0;

            this.disY = 0;

            var _this = this;

            this.div.onmousedown = function (evt) {

                _this.getDistance(evt);

                document.onmousemove = function (evt) {

                    _this.setPosition(evt);

                }

                _this.div.onmouseup = function () {

                    _this.clearEvent();

                }

            }

        }

        Drag.prototype.getDistance = function (evt) {

            var oEvent = evt || event;

            this.disX = oEvent.clientX - this.div.offsetLeft;

            this.disY = oEvent.clientY - this.div.offsetTop;

        }

        Drag.prototype.setPosition = function (evt) {

            var oEvent = evt || event;

            var l = oEvent.clientX - this.disX;

            var t = oEvent.clientY - this.disY;

            if (l <= 0) {

                l = 0;

            }

            else if (l >= document.documentElement.clientWidth - this.div.offsetWidth) {

                l = document.documentElement.clientWidth - this.div.offsetWidth;

            }

            if (t <= 0) {

                t = 0;

            }

            else if (t >= document.documentElement.clientHeight - this.div.offsetHeight) {

                t = document.documentElement.clientHeight - this.div.offsetHeight;

            }

            this.div.style.left = l + "px";

            this.div.style.top = t + "px";

        }

        Drag.prototype.clearEvent = function () {

            this.div.onmouseup = null;

            document.onmousemove = null;

        }

at last:最终实现:

  window.onload = function () {

            new Drag("div1");

            new Drag("div2");

        }

效果如下:

使用js实现的简单拖拽效果

以上所述就是本文的全部内容了,希望能对大家更加熟练的掌握javascript有所帮助。

Javascript 相关文章推荐
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
javascript 事件处理程序介绍
Jun 27 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
May 09 Javascript
JavaScript中Date.toSource()方法的使用教程
Jun 12 Javascript
js实现增加数字显示的环形进度条效果
Feb 05 Javascript
Vue导出json数据到Excel电子表格的示例
Dec 04 Javascript
layui select获取自定义属性方法
Aug 15 Javascript
webpack 处理CSS资源的实现
Sep 27 Javascript
vue中添加与删除关键字搜索功能
Oct 12 Javascript
如何优雅地取消 JavaScript 异步任务
Mar 22 Javascript
JS Array.from()将伪数组转换成数组的方法示例
Mar 23 Javascript
layui使用及简单的三级联动实现教程
Dec 01 Javascript
使用纯javascript实现放大镜效果
Mar 18 #Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
Mar 18 #Javascript
javascript中的Base64、UTF8编码与解码详解
Mar 18 #Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 #Javascript
javascript操作Cookie(设置、读取、删除)方法详解
Mar 18 #Javascript
jQuery选择id属性带有点符号元素的方法
Mar 17 #Javascript
jQuery统计指定子元素数量的方法
Mar 17 #Javascript
You might like
php print EOF实现方法
2009/05/21 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
使用php计算排列组合的方法
2013/11/13 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
基于elementUI竖向表格、和并列的案例
2020/10/26 Javascript
python实现微信接口(itchat)详细介绍
2017/10/23 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
python实现从ftp服务器下载文件
2020/03/03 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
C++面试题目
2013/06/25 面试题
sort命令的作用和用法
2013/08/25 面试题
园林系毕业生求职信
2014/06/23 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
档案工作汇报材料
2014/08/21 职场文书
介绍信如何写
2015/01/31 职场文书
工程部主管岗位职责
2015/02/12 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书