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 相关文章推荐
IE6图片加载的一个BUG解决方法
Jul 13 Javascript
jquery自定义类似$.ajax()的方法实现代码
Aug 13 Javascript
js的Boolean对象初始值示例
Mar 04 Javascript
jquery果冻抖动效果实现方法
Jan 15 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
Sep 17 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
BootStrap 超链接变按钮的实现方法
Sep 25 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
Mar 09 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
Sep 19 Javascript
详解angularjs 学习之 scope作用域
Jan 15 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
Dec 21 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
Oct 29 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
将二维数组转为一维数组的2种方法
2014/05/26 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
Javascript Select操作大集合
2009/05/26 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
js实现表格数据搜索
2020/08/09 Javascript
Python中表示字符串的三种方法
2017/09/06 Python
使用python3构建文件传输的方法
2019/02/13 Python
Python3 log10()函数简单用法
2019/02/19 Python
pycharm运行scrapy过程图解
2019/11/22 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
项目合作计划书
2014/01/09 职场文书
秋季运动会广播稿
2014/02/22 职场文书
英文请假条
2014/04/11 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
优秀团员自我评价
2015/03/10 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
团委副书记工作总结
2015/08/14 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
python之json文件转xml文件案例讲解
2021/08/07 Python
Go语言 详解net的tcp服务
2022/04/14 Golang