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 相关文章推荐
图片按比例缩放函数
Jun 26 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
Apr 22 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
May 10 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
JS仿Windows开机启动Loading进度条的方法
Feb 26 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
Jun 06 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
Oct 26 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
Dec 11 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
Dec 25 jQuery
jQuery实现常见的隐藏与展示列表效果示例
Jun 04 jQuery
node thread.sleep实现示例
Jun 20 Javascript
vue.js动画中的js钩子函数的实现
Jul 06 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
PHP生成随机密码类分享
2014/06/25 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
Python 2与Python 3版本和编码的对比
2017/02/14 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
Python实现快速计算词频功能示例
2018/06/25 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
python2 对excel表格操作完整示例
2020/02/23 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
八一建军节部队活动方案
2014/02/04 职场文书
新年晚会主持词
2014/03/24 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
警察群众路线整改措施
2014/09/26 职场文书
创业计划书之网吧
2019/10/10 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python