使用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 相关文章推荐
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
Apr 02 Javascript
浅析JavaScript中的对象类型Object
May 26 Javascript
javascript js 操作数组 增删改查的简单实现
Jun 20 Javascript
javascript回到顶部特效
Jul 30 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
Apr 25 Javascript
AngularJS的$location使用方法详解
Oct 19 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
Dec 28 Javascript
vue实现未登录跳转到登录页面的方法
Jul 17 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
JavaScript JSON数据处理全集(小结)
Aug 15 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
Sep 04 Javascript
二维码条形码生成的JavaScript脚本库
Jul 07 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变量引用的面试题
2010/08/08 PHP
php摘要生成函数(无乱码)
2012/02/04 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
解析Python编程中的包结构
2015/10/25 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
自动化专业本科毕业生求职信
2013/10/20 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
临床护理求职信
2014/04/26 职场文书
2015年维修工作总结
2015/04/25 职场文书
大学开学感言
2015/08/01 职场文书
教师培训学习心得体会
2016/01/21 职场文书
TV动画《间谍过家家》公开PV
2022/03/20 日漫