js拖拽功能实现代码解析


Posted in Javascript onNovember 28, 2016

本文解决的问题:

1、怎样在网页中实现拖曳功能;

2、document.documentElementdocument.body的区别。
document.documentElement.clientWidth指整个html文档的宽度,document.body.clientWidth的宽度。这两者是不一样的。可以在console控制台通过console.log(document.documentElement)和console.log(document.body)进行测试。

3、getBoundingClientRect().leftoffsetLeft的区别。
getBoundingClientRect()用于获取元素的left、top、right、bottom。offset获取相对于父级的left和top。getBoundingClientRect()获取相对于窗口的left、top、right、bottom。

4、e.clientX指的是鼠标点相对于窗口的坐标。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>弹窗</title>
 <style type="text/css">
  #mask {
   position: fixed;
   left:0;
   top:0;
   width:100%;
   height: 100%;
   background-color: hsla(250,100%,50%,0.6);
   display: none;
  }
  #popBox {
   position: absolute;
   background-color: #fff;
   width:200px;
   height: 200px;
   /*left:50%;
   top:50%;*/
   /*margin-top: -100px;
   margin-left: -100px;*/
  }
 </style>
</head>
<body>
 <button id="clickBtn">点击</button>
 <div id="mask">
  <div id="popBox"></div>
 </div>
 <script type="text/javascript">
  var clickBtn = document.getElementById("clickBtn");
  var popBox = document.getElementById("popBox")
  var mask = document.getElementById("mask");
  clickBtn.onclick = function() {
   mask.style.display = "block";
   popBox.style.left = (document.documentElement.clientWidth - popBox.offsetWidth)/2 + "px";
   popBox.style.top = (document.documentElement.clientHeight - popBox.offsetHeight)/2 + "px";

  }
  popBox.onclick = function(e) {
   var e = e || window.event;//e指所有代码的集合,通过它可以获取事件的各种属性。
   e.cancelBubble = true;//阻止事件冒泡,即点击事件不会传递到mask这一层,意味着不会触发点击mask事件代码。
  }
  mask.onclick = function() {
   mask.style.display = "none";
  }

  //拖拽 mousedown->mousemove->mouseup 
  popBox.onmousedown = function(e) {
   var e = e || window.event;
   var pos = popBox.getBoundingClientRect();//getBoundingClientRect()用于获取元素的left、top、right、bottom。offset获取相对于父级的left和top。getBoundingClientRect()获取相对于窗口的left、top、right、bottom。
   var oX = e.clientX - pos.left;//clientX指相对于窗口的坐标。
   var oY = e.clientY - pos.top;
   document.onmousemove = function(e) {
    var e = e || window.event;
    var oLeft = e.clientX - oX;
    var oTop = e.clientY - oY;
    popBox.style.left = oLeft + "px";
    popBox.style.top = oTop + "px";
    if (oLeft<0) {
     popBox.style.left = 0 + "px";
    };
    if (oLeft>document.documentElement.clientWidth - popBox.offsetWidth) {
     popBox.style.left = document.documentElement.clientWidth - popBox.offsetWidth + "px";//document.documentElement.clientWidth指整个html文档的宽度,document.body.clientWidth的宽度。这两者是不一样的。可以在console控制台通过console.log(document.documentElement)和console.log(document.body)进行测试。


    }
    if (oTop<0) {
     popBox.style.top = 0 + "px";
    };
    if (oTop > document.documentElement.clientHeight - popBox.offsetHeight) {
     popBox.style.top = document.documentElement.clientHeight - popBox.offsetHeight + "px";
    }

   }
   popBox.onmouseup = function() {
    document.onmousemove = null;
   }
  }
 </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
Feb 17 Javascript
jQuery学习笔记之jQuery动画效果
Sep 09 Javascript
JavaScript中提前声明变量或函数例子
Nov 12 Javascript
node.js中的fs.chown方法使用说明
Dec 16 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
Mar 23 Javascript
用js编写的简单的计算器代码程序
Aug 04 Javascript
jQuery实现的导航动画效果(附demo源码)
Apr 01 Javascript
iframe中使用jquery进行查找的方法【案例分析】
Jun 17 Javascript
JavaScript实现时间倒计时跳转(推荐)
Jun 28 Javascript
详解jQuery uploadify文件上传插件的使用方法
Dec 16 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
May 02 Javascript
js设计模式之代理模式及订阅发布模式实例详解
Aug 15 Javascript
百度搜索框智能提示案例jsonp
Nov 28 #Javascript
JS函数多个参数默认值指定方法分析
Nov 28 #Javascript
ajax级联菜单实现方法实例分析
Nov 28 #Javascript
jQuery select自动选中功能实现方法分析
Nov 28 #Javascript
JS两种类型的表单提交方法实例分析
Nov 28 #Javascript
简单实现JavaScript图片切换效果
Nov 28 #Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
Nov 28 #Javascript
You might like
咖啡的种类和口感
2021/03/03 新手入门
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
简单的js表单验证函数
2013/10/28 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
2014/03/14 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
javascript防抖函数debounce详解
2019/06/11 Javascript
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python中的rjust()方法使用详解
2015/05/19 Python
Python的pycurl包用法简介
2015/11/13 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
Python如何生成树形图案
2018/01/03 Python
python3爬取数据至mysql的方法
2018/06/26 Python
python3.6数独问题的解决
2019/01/21 Python
python打造爬虫代理池过程解析
2019/08/15 Python
Python threading的使用方法解析
2019/08/28 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
linux面试题参考答案(10)
2013/11/04 面试题
艺术设计专业个人求职信
2013/09/21 职场文书
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
成立公司计划书
2014/05/07 职场文书
班主任开场白
2015/06/01 职场文书
奠基仪式致辞
2015/07/30 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android