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 相关文章推荐
贴一个在Mozilla中常用的Javascript代码
Jan 09 Javascript
javascript学习笔记(十) js对象 继承
Jun 19 Javascript
jquery简单图片切换显示效果实现方法
Jan 14 Javascript
Bootstrap中CSS的使用方法
Feb 17 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
Jul 22 Javascript
es6的数字处理的方法(5个)
Mar 16 Javascript
Vue2实时监听表单变化的示例讲解
Aug 30 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
Jan 05 jQuery
详解如何写出一个利于扩展的vue路由配置
May 16 Javascript
vxe-table vue table 表格组件功能
May 26 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
JavaScript实现京东快递单号查询
Nov 30 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
Terran兵种对照表
2020/03/14 星际争霸
一个数据采集类
2007/02/14 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
详解PHP用substr函数截取字符串中的某部分
2016/12/03 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
2015/10/08 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
Python sys模块常用方法解析
2020/02/20 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
Pygame框架实现飞机大战
2020/08/07 Python
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
环保口号大全
2014/06/12 职场文书
幸福家庭标语
2014/06/27 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
幼师小班个人总结
2015/02/12 职场文书
入党转正申请报告
2015/05/15 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
使用python创建股票的时间序列可视化分析
2022/03/03 Python
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python