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模拟弹出效果代码修正版
Aug 07 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
Feb 07 Javascript
使用js显示当前时间示例
Mar 02 Javascript
详解JS函数重载
Dec 04 Javascript
JavaScript判断数组是否包含指定元素的方法
Jul 01 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
May 24 Javascript
javascript 判断一个对象为数组的方法
May 03 Javascript
Vue-Cli中自定义过滤器的实现代码
Aug 12 Javascript
VueJS事件处理器v-on的使用方法
Sep 27 Javascript
Vue脚手架的简单使用实例
Jul 10 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
12 种使用Vue 的最佳做法
Mar 30 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中防止SQL注入的最佳解决方法
2013/04/25 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
JavaScript与函数式编程解释
2007/04/27 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
Python和php通信乱码问题解决方法
2014/04/15 Python
python中文编码问题小结
2014/09/28 Python
Python修改MP3文件的方法
2015/06/15 Python
Python正则表达式使用范例分享
2016/12/04 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
python五子棋游戏的设计与实现
2019/06/18 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
大学生实习证明范本
2014/01/15 职场文书
装修活动策划方案
2014/08/27 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
总经理岗位职责
2015/02/04 职场文书
欢送会主持词
2015/07/01 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
python中tkinter复选框使用操作
2021/11/11 Python