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 相关文章推荐
TextArea不支持maxlength的解决办法(jquery)
Sep 13 Javascript
jQuery实现当按下回车键时绑定点击事件
Jan 28 Javascript
jQuery实现带滑动条的菜单效果代码
Aug 26 Javascript
jQuery实现每隔几条元素增加1条线的方法
Jun 27 Javascript
Angular 路由route实例代码
Jul 12 Javascript
浅析Jquery操作select
Dec 13 Javascript
JS获得一个对象的所有属性和方法实例
Feb 21 Javascript
angularjs实现多张图片上传并预览功能
Feb 24 Javascript
jQuery选择器特殊字符与属性空格问题
Aug 14 jQuery
JS中利用FileReader实现上传图片前本地预览功能
Mar 02 Javascript
webpack4.x开发环境配置详解
Aug 04 Javascript
防止Layui form表单重复提交的实现方法
Sep 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
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
JavaScript delete操作符应用实例
2009/01/13 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
JS与jQ读取xml文件的方法
2015/12/08 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
Python-基础-入门 简介
2014/08/09 Python
Python实现字典依据value排序
2016/02/24 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
Python中psutil的介绍与用法
2019/05/02 Python
Matplotlib animation模块实现动态图
2021/02/25 Python
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
C语言面试题
2015/10/30 面试题
企业管理专业个人求职信范文
2013/09/24 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
2014庆六一活动方案
2014/03/02 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
产品质量承诺书
2014/03/27 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电