鼠标行为

e.属性 含义 相关属性
clientX/Y 鼠标位置相对于当前可视区域的坐标 x/y(FF火狐部分版本不支持)
pageX/Y(IE9以下不支持) 鼠标位置相对于当前文档的坐标 layerX/Y (IE11以下同clientX/Y)
screenX/Y 鼠标位置相对于显示器屏幕的坐标
offsetX/Y 鼠标位置相对于块元素的坐标(以左上角为顶点,包括边框,Safari不包括边框)

pageXY封装

// 兼容性写法:获取相对文档的位置
function pagePos(e) {var sLeft = getScrollOffset().left,sTop = getScrollOffset().top,cLeft = document.documentElement.clientLeft || 0,// 获取文档偏移,若值为undefined,取偏移为0cTop = document.documentElement.clientTop || 0;return {X: e.clientX + sLeft - cLeft,Y: e.clientY + sTop - cTop,}
}

拖拽

  • mousemove是基于mousedown事件的
oBox.onmousedown = function (e) {document.onmousemove = function (e) {var e = e || window.event,page = pagePos(e);oBox.style.left = page.X + 'px'oBox.style.top = page.Y + 'px'}
}
oBox.onmouseup = function (e) {document.onmousemove = null
}
// 拖拽的时候,box的左上角顶点不要突变到鼠标的位置
oBox.onmousedown = function (e) {var e = e || window.event,x = pagePos(e).X - parseInt(getStyles(this, 'left')),y = pagePos(e).Y - parseInt(getStyles(this, 'top'));document.onmousemove = function (e) {var e = e || window.event,page = pagePos(e);oBox.style.left = page.X - x + 'px'oBox.style.top = page.Y - y + 'px'}document.onmouseup = function (e) {this.onmousemove = nullthis.onmouseup = null}
}
// 封装拖拽函数
function elemDrag(elem) {var x,y;addEvent(elem, 'mousedown', function (e) {var e = e || window.event;x = pagePos(e).X - parseInt(getStyles(elem, 'left'))y = pagePos(e).Y - parseInt(getStyles(elem, 'top'))console.log(x, y)addEvent(document, 'mousemove', mouseMove)addEvent(document, 'mouseup', mouseUp)cancelBubble(e)preventDefaultEvent();function mouseMove(e) {var e = e || window.event,page = pagePos(e)elem.style.top = page.Y - y + 'px'elem.style.left = page.X - x + 'px'}function mouseUp(e) {var e = e || window.eventremoveEvent(document, 'mousemove', mouseMove)removeEvent(document, 'mouseup', mouseUp)}})
}

DOM-11 【兼容】鼠标行为坐标系、pageXY封装、拖拽函数封装相关推荐

  1. 【JavaScript 进阶之旅 DOM篇 第九章】鼠标行为、pageX|Y封装、拖拽事件封装

    文章目录 一.鼠标行为 1.clientX/Y 2.pageX/Y 3.screenX/Y 4.offsetX/Y 5.layerX/Y(不推荐使用) 6.x/y(不推荐使用) 二.pageX|Y封装 ...

  2. Js实现拖拽 --面向对象封装( 超详细中文注释)

    这类文章网上的很多.我只是做了详细的中文注释.便于大家理解. --废话不多说直接上源码  (用到的图片请随便自己代替) javascript代码部分: 1 /**js拖拽特效封装*/ 2 //关于js ...

  3. JS实现拖拽并解决拖拽过程中鼠标抬起仍旧处于拖拽状态问题

    需求分析 实现一个任意元素可以被鼠标任意拖拽:鼠标在这个元素上按下,开始拖拽,元素跟着鼠标一起移动,当鼠标松开时,被拖拽的元素固定在当前位置上.如图所示(底下灰色的轨迹不知道为啥录制动图就出现了,实际 ...

  4. JS拖拽不流畅、鼠标滑动太快导致拖拽物脱离鼠标问题

    ###拖拽的实现原理:通过事件mousedown(事件的触发) →mousemove(事件的控制) →mouseup(事件的清除),拖拽的过程就是mousemove阶段: ###问题产生的原因:因为m ...

  5. js面向对象思想封装拖拽功能,兼容pc和移动端

    我们在开发项目过程中,很可能会碰到页面上某块需要可以拖拽移动的功能需求,网上已经有不少前辈分享了相关功能的案例,插件或者代码,但是考虑到项目功能需求,我们可能仅需要实现拖拽移动功能就可以,不需要其他功 ...

  6. 歌词同步滚动,比市面的大多数效果都好,在平滑滚动的前提下加上了鼠标滚轮滚动以及上下拖拽功能

    歌词滚动核心原理 解析歌词文件,转换成JSON 对象,java 代码放在最下面 将歌词时间部分存到数组,字符部分放到 HTML 标签里面,通过Jquery 选中所有歌词 $li ,拿到一个类似于数组的 ...

  7. 前端基础进阶(十):面向对象实战之封装拖拽对象

    https://segmentfault.com/a/1190000012646488  https://yangbo5207.github.io/wutongluo/ 说明:此处只是记录阅读前端基础 ...

  8. JavaScript(11) - 阻止事件冒泡和默认行为,拖拽,事件监听器

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.阻止事件冒泡和默认行为 二.拖拽 1, 实现拖拽相关的三大事件: 2, 实现拖拽思路: 1, 给目标元素添加onmous ...

  9. Angular2封装拖拽指令

    一:创建drag.directive.ts 代码如下: /* 1.Directive提供@Directive装饰器功能. 2.ElementRef注入到指令构造函数中.这样代码就可以访问 DOM 元素 ...

最新文章

  1. Nginx常见的错误及解决方法
  2. python 比较两个字符串
  3. centos 编译 mysql_Centos Mysql 编译安装调试
  4. 仓库的种类和彼此关系
  5. [Vue]Scoped Css与Css Modules的区别
  6. Win11正版和盗版有什么区别
  7. Cell|严景华/齐建勋首次发现新冠病毒进入细胞的详细分子细节
  8. cmake,CMakeLists.txt,make,makefile的关系
  9. 基于layuiCMS2.0开发后台管理系统,实现自定义分页并动态加载数据表格的示例...
  10. 联想杨元庆:没必要做操作系统和芯片;华为Mate 20 Pro被迫退出安卓 Q Beta;GitHub推赚钱新利器 | 极客头条...
  11. java expression 强制出现_Java中带有强制括号对的单行循环
  12. 极客大学架构师训练营 数据结构与算法 分布式数据库 Hadoop 第八次作业
  13. 2016美国计算机研究生,2016年美国计算机工程专业研究生排名(转载)
  14. 钉钉安装需要管理员权限报错解决办法
  15. gazebo中计算理想相机模型的fx fy
  16. 一张A4纸打印多张财务凭证(分栏报表)
  17. Unity接口的使用
  18. 计算机主机内部结构连接,OPS电脑与显示器之间的连接结构的制作方法
  19. 完全平方数:若一个整数n能表示成某个整数m的平方的形式,则称这个数为完全平方数。写一个程序判断输入的整数是不是完全平方数。
  20. Unity3d实现扭动挤压浏览效果

热门文章

  1. js中的json ajax,js结合json实现ajax简单实例
  2. 只能计算机论文,谈计算机及人工智能技术发展-人工智能论文-计算机论文.docx...
  3. shell脚本发邮件内容html,[转]Shell脚本中发送html邮件的方法
  4. python3项目源代码下载_2019年最值得关注的34个Python开源项目——Let's go!
  5. android 自定义wifi设置在哪里,Android Wifi的设置、连接操作
  6. iOS核心动画之CALayer-自定义层
  7. 微服务深入浅出(7)-- 网关路由Zuul
  8. windows linux 子系统折腾记
  9. Python中正反斜杠('/'和'\')的意义
  10. Android使用token维持登陆状态的方法