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 相关文章推荐
createElement动态创建HTML对象脚本代码
Nov 24 Javascript
IE JS编程需注意的内存释放问题
Jun 23 Javascript
JS可以控制样式的名称写法一览
Jan 16 Javascript
jquery实现页面图片等比例放大缩小功能
Feb 12 Javascript
javascript中数组和字符串的方法对比
Jul 20 Javascript
JS正则替换掉小括号及内容的方法
Nov 29 Javascript
webpack源码之loader机制详解
Apr 06 Javascript
微信小程序实现文字跑马灯
May 26 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
Mar 28 Javascript
node中实现删除目录的几种方法
Jun 24 Javascript
javascript实现点亮灯泡特效示例
Oct 15 Javascript
小程序双头slider选择器的实现示例
Mar 31 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
VOLVO车载收音机
2021/03/02 无线电
PHP开发文件系统实例讲解
2006/10/09 PHP
PHP 文件系统详解
2012/09/13 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
js实现div闪烁原理及实现代码
2014/06/24 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Python实现批量修改文件名实例
2015/07/08 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
附答案的Java面试题
2012/11/19 面试题
工地安全标语
2014/06/07 职场文书
预防煤气中毒方案
2014/06/16 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle