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 相关文章推荐
function, new function, new Function之间的区别
Mar 08 Javascript
javascript 常用代码技巧大收集
Feb 25 Javascript
得到jQuery detach()后节点中的某个值实现代码
Feb 05 Javascript
JS在textarea光标处插入文本的小例子
Mar 22 Javascript
web网页按比例显示图片实现原理及js代码
Aug 09 Javascript
jquery加载图片时以淡入方式显示的方法
Jan 14 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
jquery滚动条插件(可以自定义)
Dec 11 Javascript
Vue.Js中的$watch()方法总结
Mar 23 Javascript
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
Jun 22 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
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
2017/06/23 jQuery
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
详解javascript对数组和json数组的操作
2019/04/15 Javascript
Python编写电话薄实现增删改查功能
2016/05/07 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
python基本语法练习实例
2017/09/19 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
Django实现学员管理系统
2019/02/26 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
学雷锋演讲稿
2014/03/04 职场文书
项目经理任命书范本
2014/06/05 职场文书
转让协议书范本
2014/09/13 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书