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 相关文章推荐
Add a Table to a Word Document
Jun 15 Javascript
JavaScript 继承详解(一)
Jul 13 Javascript
javascript中eval函数用法分析
Apr 25 Javascript
jquery实现具有嵌套功能的选项卡
Feb 12 Javascript
JS读写CSS样式的方法汇总
Aug 16 Javascript
node.JS md5加密中文与php结果不一致的解决方法
May 05 Javascript
利用jquery如何从json中读取数据追加到html中
Dec 01 jQuery
jQuery实现鼠标移入移出事件切换功能示例
Sep 06 jQuery
JS 实现获取验证码 倒计时功能
Oct 29 Javascript
如何在微信小程序里面退出小程序的方法
Apr 28 Javascript
vue.js实现二级菜单效果
Oct 19 Javascript
javascript canvas实现简易时钟例子
Sep 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
PHP XML备份Mysql数据库
2009/05/27 PHP
PHP实现异步调用方法研究与分享
2011/10/27 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
PHP asXML()函数讲解
2019/02/03 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
[01:20]PWL S2开团时刻第三期——团战可以输 蝙蝠必须死
2020/11/26 DOTA
Python有序字典简单实现方法示例
2017/09/28 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
HTML5 Canvas概述
2009/08/26 HTML / CSS
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
寄语学生的话
2014/04/10 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
索赔员岗位职责
2015/02/15 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
天堂的孩子观后感
2015/06/11 职场文书
《活见鬼》教学反思
2016/02/24 职场文书