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 相关文章推荐
在jQuery ajax中按钮button和submit的区别分析
Oct 07 Javascript
jQuery关于导航条背景切换效果实现示例
Sep 04 Javascript
js抽奖实现随机抽奖代码效果
Dec 02 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
Jun 24 Javascript
js实现简单的联动菜单效果
Aug 19 Javascript
获取jqGrid中选择的行的数据
Nov 30 Javascript
jquery中用函数来设置css样式
Dec 22 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
Mar 08 Javascript
vue实现商品加减计算总价的实例代码
Aug 12 Javascript
JavaScript中AOP的实现与应用
May 06 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
Nov 03 Javascript
小程序wx.getUserProfile接口的具体使用
Jun 02 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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
PHP中操作ini配置文件的方法
2013/04/25 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
vue 动态创建组件的两种方法
2020/12/31 Vue.js
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
Python建立Map写Excel表实例解析
2018/01/17 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
Python中的 enum 模块源码详析
2019/01/09 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
简单的Python调度器Schedule详解
2019/08/30 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
小学防溺水制度
2014/01/29 职场文书
中学生期末评语
2014/02/03 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
Java移除无效括号的方法实现
2021/08/07 Java/Android
python lambda 表达式形式分析
2022/04/03 Python
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android