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 相关文章推荐
JavaScript实现Sleep函数的代码
Mar 04 Javascript
Pro JavaScript Techniques学习笔记
Dec 28 Javascript
JS过滤url参数特殊字符的实现方法
Dec 24 Javascript
常用的几段javascript代码分享
Mar 25 Javascript
JQuery实现动态表格点击按钮表格增加一行
Aug 24 Javascript
JavaScript中的eval()函数使用介绍
Dec 31 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
Node.js DES加密的简单实现
Jul 07 Javascript
前端js实现文件的断点续传 后端PHP文件接收
Oct 14 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
Jan 04 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 Javascript
Vue脚手架编写试卷页面功能
Mar 17 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
IE bug table元素的innerHTML
2010/01/11 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Python3实现购物车功能
2018/04/18 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
Python实现多属性排序的方法
2018/12/05 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
Python requests设置代理的方法步骤
2020/02/23 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
三星法国官方网站:Samsung法国
2019/10/31 全球购物
Java基础面试题
2012/11/02 面试题
学生励志演讲稿
2014/01/06 职场文书
公司业务员岗位职责
2014/03/18 职场文书
创先争优一句话承诺
2014/05/29 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
浅谈Python3中datetime不同时区转换介绍与踩坑
2021/08/02 Python
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL