背景

最近在做一款基于canvas的画板插件,开发过程中的画笔功能就会使用很多关于鼠标位置的属性:screenX/Y,clientX/Y,pageX/Y,offsetX/Y,以及节点offsetLeft和offsetTop。
之前在做到过类似的工具(很简单),但都是看了下鼠标位置信息的api看到那个用那个没有去深思它们之间的区别,这次在遇见坑花了点时间整理强化下自己的记忆。

要理解它们之间的差异需要正确的认识参照物。

screenX/Y

正如名字一样它的参照物是电脑的屏幕。如图所示,把浏览器缩小后拖到某个位置,绿色为鼠标点击位置,该点的screenX和Y分别为434和945,说明screen属性会受到浏览器窗口位置影响。 它表示的是当前点位在屏幕的位置。

clientX/Y

clientX/Y属性的参数物则是浏览器的可视区域。如图所示,浏览器窗口位置跟上面一直。 但黑点clientX/Y属性的值为322和800,说明client属性不会受到浏览器窗口位置的影响。它表示当前点在浏览器窗口可视区(可视区 = 浏览器窗口 – 导航栏 --工具栏 – 书签栏 – 地址栏)的位置 。

pageX/Y

pageX/Y属性的参数物也是浏览器的可视区域。但是和clientX/Y不同的是它还会加上可视区滚动的scrollX/Y。

offsetX/Y

offsetX/Y属性的参数物是设置事件的目标元素(用代码来说就是event.taeget)。举个例子,一个父元素高宽都为500px且overflow为scroll;子元素高宽都是1000px(背景为红色)。我们为子元素设置一个点击事件。如图所示:黑点的offsetX为(X1+X2) Y为(Y1+Y2);这里有一个误区容易忘记y2和x2的长度。要记住参照物为目标元素在本例中就是子元素,而资源的实际宽高为(YA+红色区域+YB),宽度同理。

接下来是对offsetLeft的理解

要理解offsetLeft和offsetTop则需要知道offsetParent。因为offsetLeft表示前元素左上角相对于offsetParent节点的左边界偏移的像素值。
当前元素的offsetParent是包含当前元素的定位元素(这句话我个人理解就是在祖先元素中第一个position属性值部位static的元素) 或者最近的 table,td,th,body元素。当前元素的 style.display 设置为 “none” 时/或者position设置为“fixed”时,offsetParent 返回 null。

我还发现了一个点如果你使用过translate来移动位置,尽管和offsetParent的左上角有偏移像素但是offsetLeft/offsetTop也为0。具体原因还未知,如果有知道的朋友希望告知:)

offsetLeft理解以及MouseEvent接口中的screenX,clientX,pageX,offsetX区别.相关推荐

  1. screenX clientX pageX的区别

    screenX clientX pageX概念 screenX:鼠标位置相对于用户屏幕水平偏移量,而screenY也就是垂直方向的,此时的参照点也就是原点是屏幕的左上角. clientX:跟scree ...

  2. screenX,clientX,pageX,offsetX,的区别

    2019独角兽企业重金招聘Python工程师标准>>> event.screenX.event.screenY 鼠标相对于用户显示器屏幕左上角的X,Y坐标.标准事件和IE事件都定义了 ...

  3. 事件坐标:screenX,clientX,pageX,offsetX的区别

    e.screenX/e.screenY: 事件发生时鼠标相对于电脑屏幕的坐标.e.screenX,e.screenY的最大值不会超过屏幕分辨率. e.clientX/e.clientY: 事件发生时鼠 ...

  4. 理解screenX clientX pageX概念

    先了解screenX,clientX,pageX概念 screenX: 鼠标位置相对于用户屏幕水平偏移量,而screenY就是垂直方向的,此时的参照点也就是原点是屏幕的左上角.clientX: 跟sc ...

  5. clientX、offsetX、screenX、pageX的区别

    一.概念总结 1.event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性.cl ...

  6. clientX、pageX、screenX以及offsetX区别

    clientX.pageX.clientX以及offsetX区别 client系列(不包含滚动条) clientX:鼠标相对于浏览器窗口可视区域x方向坐标 clientY:鼠标相对于浏览器窗口可视区域 ...

  7. 研究MouseEvent中的clientX、offsetX、pageX、screenX

    很多时候需要在鼠标点击的时候获取点击的坐标来处理一些逻辑,有时候clientX.offsetX.pageX用的也不清楚,特此做了一个实验来记录. 1.含义 clientX 提供应用程序客户区域内发生事 ...

  8. 【鼠标事件 MouseEvent】clientX clientY offsetX offsetX pageX screenX screenY

    鼠标事件 MouseEvent 对象,下clientX clientY offsetX offsetX pageX screenX screenY 定义转自 MDNMouseEvent MouseEv ...

  9. clientX,screenX,pageX,offsetX的区别

    前言 关于clientX,screenX,pageX,offsetX的区别之前也比较迷糊,然后自己写了几个demo算是弄明白了,在这记录一下. 定义 一.clientX.clientY 点击位置距离当 ...

最新文章

  1. 李开复对话Yoshua Bengio:AI技术的下一个突破
  2. 怎么将算法改成程序_多肉烂根怎么办?将土培改成水培,长势好,叶子变得更水灵...
  3. 使用批处理执行sql 语句
  4. WTM系列视频教程:初体验
  5. 2.图像作为函数 | 初探数字图像_3
  6. php 检验类,php实现的简单检验登陆类
  7. [十]JavaIO之FilterInputStream FilterOutputStream
  8. python的httplib、urllib和urllib2的区别及应用
  9. mysql 查询索引
  10. [Halcon测量] 测量助手详解
  11. 最详细的虚拟机安装教程
  12. PDF转换Word、Excel、PPT、图片,PDF去水印,PDF拆分该怎么做到这些
  13. 【渝粤教育】电大中专常见病药物治疗 (3)作业 题库
  14. python从入门到入魔第八天——turtle库使用(含玫瑰花绘制实例)
  15. Win10彻底删除OneDrive的方法
  16. 凸包问题--动态凸包(平衡树维护)
  17. 【游戏设计模式】之三 状态模式 有限状态机 Unity版本实现
  18. 求生之路2不显示局域网服务器,求生之路2怎么局域网联机 求生之路2局域网联机教程...
  19. PS 画哆啦A梦
  20. 入门计算机视觉学习路线

热门文章

  1. 向家坝水电站蓄水第五天老屏山县城没入金沙江-老屏山-水电站
  2. 记录一次公司点星PBX(DotAsterisk) 映射外网后外部SIP分机注册拨通无声音的故障解决方法
  3. 会员管理系统源码 php语言开发
  4. COLLATE LOCALIZED ASC 按本地语言进行排序
  5. C#使用正则表达式校验邮箱
  6. Linux 文件系统与日志分析
  7. js 屏蔽原生鼠标和键盘事件
  8. 知识点滴 - 非正式组织结构权力
  9. [0CTF 2016]piapiapia php反序列化字符串逃逸
  10. 2020年Java面试题及答案_Java面试宝典_Java笔试题(持续更新中)