JS实现拖拽的方法分析


Posted in Javascript onDecember 20, 2016

本文实例分析了JS实现拖拽的方法。分享给大家供大家参考,具体如下:

分析:

1.鼠标按下,拖拽开始,鼠标移动,拖拽进行,鼠标抬起,拖拽结束(三个事件)

2.被拖动元素与鼠标之间的位置在拖动过程中始终不变,利用这个原理,被拖动元素的位置就是鼠标的左(上)边距-鼠标与被拖动元素之间的距离

注意:onmousemove应该是在onmousedown发生时进行,不然不需要点击也能拖动了。

用户可能会将拖动层脱出窗口外。

核心代码:

window.onload=function(){
  var box=document.getElementById("div");
  var disX;
  var disY;
  box.onmousedown=function(ev){ //如果三个事件都用在box上,拖得快一点,鼠标脱离移动层,移动层就拖不动了
    var oEvent=ev||event;
    disX=oEvent.clientX-box.offsetLeft;
    disY=oEvent.clientY-box.offsetTop;
    document.onmousemove=function(ev){
      var oEvent=ev||event;
      var l=oEvent.clientX-disX;
      var t=oEvent.clientY-disY;
      if(l<0){
        l=0;
      }else if(l>document.documentElement.clientWidth-box.offsetWidth){
        l=document.documentElement.clientWidth-box.offsetWidth;
      }
      if(t<0){
        t=0;
      }else if(t>document.documentElement.clientHeight-box.offsetHeight){
        t=document.documentElement.clientHeight-box.offsetHeight;
      }
      box.style.left=l+'px';
      box.style.top=t+'px';
    };
    document.onmouseup=function(){
      document.onmousemove=null;
      document.onmouseup=null; //鼠标抬起来后,onmouseup事件本身也没意义了,所以最好清理掉
    };
    return false; //阻止默认行为,空的div在低版本ff下,第二次拖动手型会变异常
  };
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
保证JavaScript和Asp、Php等后端程序间传值编码统一
Apr 17 Javascript
node.js中的path.basename方法使用说明
Dec 09 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
Apr 03 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
Jan 18 Javascript
JavaScript学习笔记整理_关于表达式和语句
Sep 19 Javascript
分享一个原生的JavaScript拖动方法
Sep 25 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
Dec 24 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
Aug 28 Javascript
JS设计模式之策略模式概念与用法分析
Feb 05 Javascript
angularJS实现不同视图同步刷新详解
Oct 09 Javascript
微信小程序接入腾讯云验证码的方法步骤
Jan 07 Javascript
JS前端模块化原理与实现方法详解
Mar 17 Javascript
JS实现Ajax的方法分析
Dec 20 #Javascript
JS实现淡入淡出图片效果的方法分析
Dec 20 #Javascript
自学实现angularjs依赖注入
Dec 20 #Javascript
JS多物体实现缓冲运动效果示例
Dec 20 #Javascript
详解js中Number()、parseInt()和parseFloat()的区别
Dec 20 #Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
Dec 20 #Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
Dec 20 #Javascript
You might like
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
php实现文件下载更能介绍
2012/11/23 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
laravel 中如何使用ajax和vue总结
2017/08/16 PHP
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
新加坡交友网站:be2新加坡
2019/04/10 全球购物
办公室前台岗位职责范本
2013/12/10 职场文书
施工安全责任书
2014/04/14 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
班风口号
2014/06/18 职场文书
中秋联欢会主持词
2015/07/04 职场文书
提档介绍信范文
2015/10/22 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏
浅谈Python中对象是如何被调用的
2022/04/06 Python