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 相关文章推荐
Jquery知识点一 Jquery的ready和Dom的onload的区别
Jan 15 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
Mar 15 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
May 07 Javascript
require.js深入了解 require.js特性介绍
Sep 04 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
Jun 19 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
Oct 09 Javascript
javascript验证手机号和实现星号(*)代替实例
Aug 16 Javascript
jQuery扩展_动力节点Java学院整理
Jul 05 jQuery
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
原生js实现拖拽功能基本思路详解
Apr 18 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
Aug 02 Javascript
js获取本日、本周、本月的时间代码
Feb 01 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
文件系统基本操作类
2006/11/23 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
flexigrid 参数说明
2010/11/23 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
PHP7新特性简述
2017/06/11 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
Python快速从注释生成文档的方法
2016/12/26 Python
Python编程之序列操作实例详解
2017/07/22 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python绘制趋势图的示例
2020/09/17 Python
医药专业推荐信
2013/11/15 职场文书
行政总监岗位职责
2013/12/05 职场文书
秋季婚礼证婚词
2014/01/11 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
高三英语复习计划
2015/01/19 职场文书
MySQL空间数据存储及函数
2021/09/25 MySQL
mysql如何查询连续记录
2022/05/11 MySQL