使用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 相关文章推荐
javascript hashtable 修正版 下载
Dec 30 Javascript
js获取事件源及触发该事件的对象
Oct 24 Javascript
IE浏览器不支持getElementsByClassName的解决方法
Aug 27 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
基于iScroll实现下拉刷新和上滑加载效果
Jul 18 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
May 07 Javascript
JS简单数组排序操作示例【sort方法】
May 17 Javascript
Vue使用localStorage存储数据的方法
May 27 Javascript
JS实现的字符串数组去重功能小结
Jun 17 Javascript
vue 如何从单页应用改造成多页应用
Oct 23 Javascript
用Javascript实现发送短信验证码间隔功能
Feb 08 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+mysql事务rollback&amp;commit示例
2010/02/08 PHP
php实现webservice实例
2014/11/06 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
原生js和jquery实现图片轮播特效
2015/04/23 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
利用python代码写的12306订票代码
2015/12/20 Python
Django多数据库的实现过程详解
2019/08/01 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
Python通过format函数格式化显示值
2020/10/17 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
元旦文艺汇演主持词
2014/03/26 职场文书
租赁意向书范本
2014/04/01 职场文书
《海底世界》教学反思
2014/04/16 职场文书
少年犯观后感
2015/06/11 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android