Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)


Posted in Javascript onJanuary 23, 2015

今天我们来看看如何让拖拽的物体不能拖出某个div之外和拖拽的吸附功能

上次讲到我们的拖拽是不可拖出可视区范围的,在这基础上我们加个父级的div,不让他拖出父级。原理和之前的一样,简单吧。

html代码:

<div id="div2">
      <div id="div1">

      </div>
    </div>

css代码:

<style type="text/css">
      #div1 {
        width: 100px;
        height: 100px;
        background: red;
        position: absolute;
      }
      #div2 {
        width: 400px;
        height: 300px;
        background: #CCCCCC;
        position: relative;
      }
    </style>

javascript代码:

<script type="text/javascript">
       // 拖拽空div 低版本的火狐有bug
      window.onload = function() {
        var oDiv = document.getElementById("div1");
        var oDiv2 = document.getElementById("div2");
        var disX = 0;
        var disY = 0;
        oDiv.onmousedown = function(ev) {
          var oEvent = ev || event;
          disX = oEvent.clientX - oDiv.offsetLeft;
          disY = oEvent.clientY - oDiv.offsetTop;

          document.onmousemove = function(ev) {
            var oEvent = ev || event;
            // 存储div当前的位置
            var oDivLeft = oEvent.clientX - disX;
            var oDivTop = oEvent.clientY - disY;

            if (oDivLeft < 0) {
              oDivLeft = 0;
            } else if (oDivLeft > oDiv2.offsetWidth - oDiv.offsetWidth) {
              oDivLeft = oDiv2.offsetWidth - oDiv.offsetWidth;
            }

            if (oDivTop < 0) {
              oDivTop = 0;
            } else if (oDivTop > oDiv2.offsetHeight - oDiv.offsetHeight) {
              oDivTop = oDiv2.offsetHeight - oDiv.offsetHeight;
            }

            oDiv.style.left = oDivLeft + 'px';
            oDiv.style.top = oDivTop + 'px';
          };

          document.onmouseup = function() {
            document.onmousemove = null;
            document.onmouseup = null;
          };
          return false; // 阻止默认事件,解决火狐的bug
        };
      };
    </script>

效果图如下:

Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)

简单吧。

接下来就是如何让他自动吸附。

其实这个大家会经常用到,比如ps里面有个小窗拖着拖着到页面边上的时候,他就会自动吸附上去。

我们这个拖拽怎么才能有这样的功能呢?

这其实之前将运动的时候提到过,就好比打车你不可能分毫不差的让司机停在那里,他肯定是停在靠近目的地的地方。

那程序也是一样的,差不多快到了就直接赋值即可。假设我拖拽的物体离左边50px的时候,我就认为他到了左边,那直接赋值为0,他就会自动吸附上去。

原理很简单,看看代码如何实现的吧。稍作修改即可

<script type="text/javascript">
      window.onload = function() {
        var oDiv = document.getElementById("div1");
        var oDiv2 = document.getElementById("div2");
        var disX = 0;
        var disY = 0;
        oDiv.onmousedown = function(ev) {
          var oEvent = ev || event;
          disX = oEvent.clientX - oDiv.offsetLeft;
          disY = oEvent.clientY - oDiv.offsetTop;

          document.onmousemove = function(ev) {
            var oEvent = ev || event;
            var oDivLeft = oEvent.clientX - disX;
            var oDivTop = oEvent.clientY - disY;


            // 当left 小于50 就自动归0 这样实现吸附
            if (oDivLeft < 50) {
              oDivLeft = 0;
            } else if (oDivLeft > oDiv2.offsetWidth - oDiv.offsetWidth) {
              oDivLeft = oDiv2.offsetWidth - oDiv.offsetWidth;
            }

            if (oDivTop < 0) {
              oDivTop = 0;
            } else if (oDivTop > oDiv2.offsetHeight - oDiv.offsetHeight) {
              oDivTop = oDiv2.offsetHeight - oDiv.offsetHeight;
            }

            oDiv.style.left = oDivLeft + 'px';
            oDiv.style.top = oDivTop + 'px';
          };

          document.onmouseup = function() {
            document.onmousemove = null;
            document.onmouseup = null;
          };
          return false; 
        };
      };
    </script>

下一次会讲到高级应用,这些会更加的负责更加的有用。已完善我们的拖拽功能。

比如说图片的拖拽和文字的选中。比如说我们现在的这个拖拽页面上就只有一个div,在平时开发中是不会遇到的。

其实在页面上有东西的情况下,这个拖拽会出现什么问题???

下次会解决 ~ 尽请期待

Javascript 相关文章推荐
从零开始学习jQuery (六) jquery中的AJAX使用
Feb 23 Javascript
JS 添加网页桌面快捷方式的代码详细整理
Dec 27 Javascript
JS实现获取当前URL和来源URL的方法
Aug 24 Javascript
轻松掌握JavaScript装饰者模式
Aug 27 Javascript
JavaScript实现移动端轮播效果
Jun 06 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
分析JS单线程异步io回调的特性
Dec 01 Javascript
微信小程序dom操作的替代思路实例分析
Dec 06 Javascript
JavaScript判断浏览器运行环境的详细方法
Jun 30 Javascript
使用layui的router来进行传参的实现方法
Sep 06 Javascript
原生javascript单例模式的应用实例分析
Feb 23 Javascript
Element Dialog对话框的使用示例
Jul 26 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
PHP实现的各种中文编码转换类分享
Jan 23 #Javascript
You might like
使用 php4 加速 web 传输
2006/10/09 PHP
解析php中的escape函数
2013/06/29 PHP
php实现读取内存顺序号
2015/03/29 PHP
php常用数组函数实例小结
2016/12/29 PHP
新手入门常用代码集锦
2007/01/11 Javascript
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
德购商城:德国进口直邮商城
2017/06/13 全球购物
比利时家具购买网站:Home24
2019/01/03 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
2015年爱牙日活动总结
2015/03/23 职场文书
工作收入证明范本
2015/06/12 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
python实现局部图像放大
2021/11/17 Python