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 相关文章推荐
js类中的公有变量和私有变量
Jul 24 Javascript
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
Sep 26 Javascript
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
Mar 26 Javascript
测试JavaScript字符串处理性能的代码
Dec 07 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 Javascript
seajs模块之间依赖的加载以及模块的执行
Oct 21 Javascript
JavaScript实现数组降维详解
Jan 05 Javascript
分享ES6的7个实用技巧
Jan 18 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
Feb 26 Javascript
解析vue data不可以使用箭头函数问题
Jul 03 Javascript
Vue 无限滚动加载指令实现方法
May 28 Javascript
Javascript中的this,bind和that使用实例
Dec 05 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
php实例分享之二维数组排序
2014/05/15 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
为指定元素增加样式的js代码
2009/12/09 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
简单了解Python生成器是什么
2019/07/02 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
Python如何转换字符串大小写
2020/06/04 Python
Django实现随机图形验证码的示例
2020/10/15 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
英国手工布艺沙发在线购买:Sofas & Stuff
2018/03/02 全球购物
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
什么是数组名
2012/05/10 面试题
jQuery treeview树形结构应用
2021/03/24 jQuery
高中毕业生的个人自我评价
2014/02/21 职场文书
表彰会主持词
2014/03/26 职场文书
催款函怎么写
2015/06/24 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
MySQL优化之慢日志查询
2022/06/10 MySQL