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和s3captche实现一个水果名字的验证
Aug 14 Javascript
javascript 通用简单的table选项卡实现
May 07 Javascript
javascript按位非运算符的使用方法
Nov 14 Javascript
浅谈JavaScript实现面向对象中的类
Dec 09 Javascript
JS实现动态移动层及拖动浮层关闭的方法
Apr 30 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
Aug 04 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
May 14 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
Node.js dgram模块实现UDP通信示例代码
Sep 26 Javascript
JS实现的贪吃蛇游戏案例详解
May 01 Javascript
vue 实现Web端的定位功能 获取经纬度
Aug 08 Javascript
微信小程序scroll-view点击项自动居中效果的实现
Mar 25 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
机电专业个人求职信范文
2013/12/30 职场文书
产品质量承诺范本
2014/03/31 职场文书
2014年计生工作总结
2014/11/21 职场文书
男方婚前保证书
2015/02/28 职场文书
教学督导岗位职责
2015/04/10 职场文书
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android
python开发制作好看的时钟效果
2022/05/02 Python