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 相关文章推荐
DHTML Slide Show script图片轮换
Mar 03 Javascript
Jquery中dialog属性小记
Sep 03 Javascript
javascript 学习笔记(onchange等)
Nov 14 Javascript
javascript 手动给表增加数据的小例子
Jul 10 Javascript
js中用window.open()打开多个窗口的name问题
Mar 13 Javascript
JavaScript数组去重的3种方法和代码实例
Jul 01 Javascript
js+css简单实现网页换肤效果
Dec 29 Javascript
ClearTimeout消除闪动实例代码
Feb 29 Javascript
JS实现页面数据无限加载
Sep 13 Javascript
JS实现可控制的进度条
Mar 25 Javascript
解决ant Design Search无法输入内容的问题
Oct 29 Javascript
Vue实现圆环进度条的示例
Feb 06 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
Mysql数据库操作类( 1127版,提供源码下载 )
2010/12/02 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
Aptana调试javascript图解教程
2009/11/30 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
Python中除法使用的注意事项
2014/08/21 Python
Cpy和Python的效率对比
2015/03/20 Python
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
python实现俄罗斯方块游戏
2020/03/25 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
洗发露广告词
2014/03/14 职场文书
工作鉴定评语
2014/05/04 职场文书
市场营销工作计划书
2014/09/15 职场文书
2014年班组工作总结
2014/11/20 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
MySQL创建管理KEY分区
2022/04/13 MySQL
Docker部署Mysql8的实现步骤
2022/07/07 Servers