Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)


Posted in Javascript onJanuary 23, 2015

拖拽的原理: 其实就是鼠标与左上角的距离保持不变。我们来看下图, Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)这红点就是鼠标。

拖拽拖拽实际上来说就是通过鼠标的位置来计算物体的位置,就是这么简单,就是这么任性。 那这个距离怎么求呢??

鼠标的位置-物体位置的差值就是那个距离 是吧。那这个斜线就是横线和竖线组成的。

Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)

我们距离看下程序怎么做。

<div id="div1">

    </div>

实际上他改的就是某个div 的left top ,那他就动起来了。 那样式中肯定要有绝对定位是吧。

<style type="text/css">
      #div1 {
        width: 200px;
        height: 200px;
        background: red;
        position: absolute;
      }
    </style>

这里有几个步骤,1. 鼠标按下 2. 鼠标抬起来 3. 鼠标移动

<script type="text/javascript">
   window.onload = function() {
    var oDiv = document.getElementById("div1");
    var disX = 0;
    var disY = 0;
    oDiv.onmousedown = function(ev) {
     var oEvent = ev || event; // 浏览器兼容
     disX = oEvent.clientX - oDiv.offsetLeft; // 横向的位置就是鼠标的位置-div的位置
     disY = oEvent.clientY - oDiv.offsetTop;
    };

    oDiv.onmousemove = function(ev) {
      var oEvent = ev || event;
      oDiv.style.left = oEvent.clientX - disX+'px'; // 当前鼠标的位置-disX
      oDiv.style.top = oEvent.clientY - disY+'px';
     };
   };
  </script>

看图说话:

Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)

var oDivLeft = oEvent.clientX - disX; 图表示 很清楚吧

Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)

mouseup 我们先不加看下现在是什么效果。。

Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)

你会发现一个很有意思的现象,我鼠标没有按也会跟着我走, 这是为什么呢???

我们来看看 mousemove: Javascript中没有人规定一定是要鼠标按下才出发是吧,不管你鼠标按不按下去,这个mousemove一直在发生,所以问题就来自于这里。当鼠标还没有按下去之前,这个时候鼠标在上面移动应该是没有反应的,是要按下去才有反应。

所以呢,这个mousemove不应该一上来就添加,而是等到鼠标按下去之后再添加mousemove,来看看修改后的代码。

顺便加上mouseup,这时他的作用就体现出来了 。作用就是oDiv.onmousemove = null; 去掉move事件,

否则当你鼠标抬起来的时候 ,物体还是会跟着你走的。 oDiv.onmouseup = null; 不留垃圾,鼠标抬起本来也就没有用了.

来看看修改后的代码:

<script type="text/javascript">
   window.onload = function() {
    var oDiv = document.getElementById("div1");
    var disX = 0;
    var disY = 0;
    oDiv.onmousedown = function(ev) {
     var oEvent = ev || event; // 浏览器兼容
     disX = oEvent.clientX - oDiv.offsetLeft; // 横向的位置就是鼠标的位置-div的位置
     disY = oEvent.clientY - oDiv.offsetTop;

     oDiv.onmousemove = function(ev) {
      var oEvent = ev || event;
      oDiv.style.left = oEvent.clientX - disX+'px'; // 当前鼠标的位置-disX
      oDiv.style.top = oEvent.clientY - disY+'px';
     };
     oDiv.onmouseup = function() {
      oDiv.onmousemove = null;
      oDiv.onmouseup = null; // 不留垃圾,鼠标抬起本来也就没有用了
     };

    };

   };
  </script>

现在我们就做了一个简单的拖拽出来,当然这还有一些小问题有待我们去解决。

但是无论如何,我们已经具备一个拖拽的雏形。 下期我们会一一解决一些bug。

Javascript 相关文章推荐
JavaScript DOM 学习第九章 选取范围的介绍
Feb 19 Javascript
autoPlay 基于jquery的图片自动播放效果
Dec 07 Javascript
javascript学习笔记(七) js函数介绍
Jun 19 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
Feb 12 Javascript
jQuery基于BootStrap样式实现无限极地区联动
Aug 26 Javascript
js 颜色选择插件
Jan 23 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
Sep 21 Javascript
vue项目中使用Svg的方法
Oct 24 Javascript
微信小程序时间标签和时间范围的联动效果
Feb 15 Javascript
jquery实现动态改变css样式的方法分析
May 27 jQuery
vue中的使用token的方法示例
Mar 10 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 #Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
Jan 23 #Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 #Javascript
jQuery选择器querySelector的使用指南
Jan 23 #Javascript
jQuery中DOM操作实例分析
Jan 23 #Javascript
jquery实现点击页面计算点击次数
Jan 23 #Javascript
jQuery中DOM树操作之复制元素的方法
Jan 23 #Javascript
You might like
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
python pdb调试方法分享
2014/01/21 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
python在非root权限下的安装方法
2018/01/23 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
Python如何调用外部系统命令
2019/08/07 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
外贸主管求职简历的自我评价
2013/10/23 职场文书
女大学生个人求职信
2013/12/09 职场文书
财政局长自荐信范文
2013/12/22 职场文书
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
交通事故检查书范文
2014/01/30 职场文书
个人作风剖析材料
2014/02/02 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
超市主管竞聘书
2015/09/15 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书