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 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 Javascript
关于javascript中this关键字(翻译+自我理解)
Oct 20 Javascript
javascript错误的认识不用关心内存管理
Dec 15 Javascript
YUI Compressor压缩JavaScript原理及微优化
Jan 07 Javascript
javascript获得当前的信息的一些常用命令
Feb 25 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
Mar 02 Javascript
js自定义trim函数实现删除两端空格功能
Feb 09 Javascript
微信小程序实现城市列表选择
Jun 05 Javascript
小程序转发探索示例
Feb 19 Javascript
a标签调用js的方法总结
Sep 05 Javascript
jQuery实现简单评论区功能
Oct 26 jQuery
vue实现锚点定位功能
Jun 29 Vue.js
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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
php读取数据库信息的几种方法
2008/05/24 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
php自动加载代码实例详解
2021/02/26 PHP
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
ES6 fetch函数与后台交互实现
2018/11/14 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
python爬虫框架talonspider简单介绍
2017/06/09 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
经贸专业毕业生求职信范文
2014/05/01 职场文书
2015年消费者权益日活动总结
2015/02/09 职场文书
村官2015年度工作总结
2015/10/14 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书