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 相关文章推荐
用jscript实现新建和保存一个word文档
Jun 15 Javascript
浅谈javascript 面向对象编程
Oct 28 Javascript
jQuery ul标签下拉菜单演示代码
Dec 11 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
May 03 Javascript
js几秒以后倒计时跳转示例
Dec 26 Javascript
搭建pomelo 开发环境
Jun 24 Javascript
jQuery中dequeue()方法用法实例
Dec 29 Javascript
AngularJS中table表格基本操作示例
Oct 10 Javascript
通俗易懂地解释JS中的闭包
Oct 23 Javascript
详解VUE 数组更新
Dec 16 Javascript
通过实例学习React中事件节流防抖
Jun 17 Javascript
vue不操作dom实现图片轮播的示例代码
Dec 18 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 CURL获取cookies模拟登录的方法
2013/11/04 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
详解javascript对数组和json数组的操作
2019/04/15 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
[06:09]辉夜杯主赛事开幕式
2015/12/25 DOTA
python显示天气预报
2014/03/02 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
python多维数组切片方法
2018/04/13 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
Python图片的横坐标汉字实例
2019/12/04 Python
python已协程方式处理任务实现过程
2019/12/27 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
《花瓣飘香》教学反思
2014/04/15 职场文书
小班下学期评语
2014/05/04 职场文书
签约仪式策划方案
2014/06/02 职场文书
军训拉歌口号
2014/06/13 职场文书
贷款委托书
2014/08/01 职场文书
2014年共青团工作总结
2014/12/10 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python