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 浏览器判断实现函数
Aug 20 Javascript
jQuery 使用手册(七)
Sep 23 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
Nov 02 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
javascript实现简单的鼠标拖动效果实例
Apr 10 Javascript
深入剖析JavaScript编程中的对象概念
Oct 21 Javascript
AngularJS $http模块POST请求实现
Apr 08 Javascript
微信小程序利用co处理异步流程的方法教程
May 20 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
Sep 19 Javascript
Vue props 单向数据流的实现
Nov 06 Javascript
使用jQuery如何写一个含验证码的登录界面
May 13 jQuery
js实现验证码功能
Jul 24 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
PHP实现Soap通讯的方法
2014/11/03 PHP
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
python list格式数据excel导出方法
2018/10/31 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
python opencv读mp4视频的实例
2018/12/07 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
学习和使用python的13个理由
2019/07/30 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
python 制作简单的音乐播放器
2020/11/25 Python
python实现马丁策略的实例详解
2021/01/15 Python
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
视光学专业毕业生推荐信
2013/10/28 职场文书
高中政治教学反思
2014/01/18 职场文书
网吧消防安全制度
2014/01/28 职场文书
初一学生期末评语
2014/04/24 职场文书
党员作风建设整改方案
2014/10/27 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
加班费申请报告
2015/05/15 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
浅谈怎么给Python添加类型标注
2021/06/08 Python