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 相关文章推荐
JSON 教程 json入门学习笔记
Sep 22 Javascript
jquery获取当前元素索引值用法实例
Jun 10 Javascript
js实现简单秒表走动的时钟特效
Mar 25 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
Jan 10 Javascript
js手机号批量滚动抽奖实现代码
Apr 17 Javascript
Vue.2.0.5过渡效果使用技巧
Mar 16 Javascript
基于Vue单文件组件详解
Sep 15 Javascript
JavaScript实现获取select下拉框中第一个值的方法
Feb 06 Javascript
webpack将js打包后的map文件详解
Feb 22 Javascript
如何修改Vue打包后文件的接口地址配置的方法
Apr 22 Javascript
Vue实现简单的留言板
Oct 23 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
Oct 24 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 图片上传代码
2011/09/13 PHP
PHP生成plist数据的方法
2015/06/16 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
一些不错的js函数ajax
2008/08/20 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
jQuery实现轮播图效果demo
2020/01/11 jQuery
Python的subprocess模块总结
2014/11/07 Python
深入理解Python中的元类(metaclass)
2015/02/14 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python自动发邮件脚本
2017/03/31 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
Python序列类型的打包和解包实例
2019/12/21 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
入党自我评价优缺点
2014/01/25 职场文书
新护士岗前培训制度
2014/02/02 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
Python可视化学习之seaborn调色盘
2022/02/24 Python