在各个浏览器的JS中,有很多个让你十分囧的属性,由于各大厂商对标准的解释和执行不一样,导致十分混乱,也让我们这些前端攻城狮十分无语和纠结>_<

John Resig大神说过,动态元素有3个至关重要的元素,位置,尺寸和可见性.所以,今天,先拿几个页面位置属性开刀.

一.PageX和clientX

PageX和clientX ,这个两个比较容易搞混,
PageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化
clientX:鼠标在页面上可视区域的位置,从浏览器可视区域左上角开始,即是以浏览器滑动条此刻的滑动到的位置为参考点,随滑动条移动 而变化.
真拗口,直接上图,


两个DIV接触点(黑点位置)
如果将浏览器Y轴方向缩小,出现了滑动条就可以分辨出两者的区别

很明显,红色参考块已经被滑动条截取部分,PageY不变,但是clientY已经变了

可是悲剧的是,PageX只有FF特有,IE这个悲剧没有啊T_T,所以大牛们想出了一个办法
PageY=clientY+scrollTop-clientTop;(只讨论Y轴,X轴同理,下同)
页面上的位置=可视区域位置+页面滚动条切去高度-自身border高度,还是直接上图比较清楚

很明显,模块交界处,scrollTop代表的是被浏览器滑动条滚过的长度,和clientY相加,刚好等于100,最后还要再减去一个clientTop,即是border-top的宽度

Jquery中的PageX的代码如下.十分精炼..

1
2
3
4
5
6
// Calculate pageX/Y if missing and clientX/Y availableif(event.pageX==null&&event.clientX!=null){vardoc =document.documentElement,body =document.body;event.pageX=event.clientX+(doc &&doc.scrollLeft||body &&body.scrollLeft||0)-(doc &&doc.clientLeft||body &&body.clientLeft||0);event.pageY=event.clientY+(doc &&doc.scrollTop||body &&body.scrollTop||0)-(doc &&doc.clientTop||body &&body.clientTop||0);}

二.screenX

screenX:鼠标在屏幕上的位置,从屏幕左上角开始,这个没有任何争议,不讨论 ^_^

三.offsetX和layerX

接下来是offsetX和layerX
offsetX:IE特有,鼠标相比较于触发事件的元素的位置,以元素盒子模型的内容区域的左上角为参考点,如果有boder,可能出现负值

IE以内容区域开始,向上进入border将出现负值

layerX:FF特有,鼠标相比较于当前坐标系的位置,即如果触发元素没有设置绝对定位或相对定位,以页面为参考点,如果有,将改变参考坐标系,从触发元素盒子模型的border区域的左上角为参考点
也就是当触发元素设置了相对或者绝对定位后,layerX和offsetX就幸福地生活在一起^-^,几乎相等,唯一不同就是一个从border为参考点,一个以内容为参考点

FF从border开始,

x/y:IE特有,这个本来和layerX/layerY的作用基本一样,但是IE的当前坐标选择十分混乱,能不用就不用,不讨论

网上别人总结的关于这六个纠结的纠结表..

1
2
3
4
5
6
offsetX/offsetY:W3C- IE+ Firefox- Opera+ Safari+ chrome+
x/y:W3C- IE+ Firefox- Opera+ Safari+ chrome+
layerX/layerY:W3C- IE- Firefox+ Opera- Safari+ chrome+
pageX/pageY:W3C- IE- Firefox+ Opera+ Safari+ chrome+
clientX/clientY:W3C+ IE+ Firefox+ Opera+ Safari+ chrome+
screenX/screenY:W3C+ IE+ Firefox+ Opera+ Safari+ chrome+

只有clientX和screenX 皆大欢喜是W3C标准.其他的,都纠结了.
最给力的是,chrome和safari一条龙通杀!完全支持所有属性.其中(offsetX和layerX都是以border为参考点)...

pageX,clientX,offsetX,layerX的区别相关推荐

  1. pageX clientX offsetX之间的区别

    鼠标在页面中的定位有pageX  pageY  clientX  clientY  offsetX  offsetY等,总是分不清楚这几个之间有什么区别,写一篇文章作为备忘录 clientX和clie ...

  2. pageX,clientX,offsetLeft,scrollLeft的区别

    pageX,clientX,offsetLeft,scrollLeft的区别 1.pageX / pageY pageX / pageY的值为鼠标相对于document的距离,即网页左上角的位置 2. ...

  3. screenX、client X、pageX、offsetX、layerX

    screenX, client X screenX: 鼠标在屏幕中的水平坐标 client X: 鼠标在客户端区域(浏览器可视区域)的水平坐标,不论页面是否有水平滚动 pageX 相对于整个文档的x( ...

  4. clientX,offsetX,pageX,screenX的异同以Chrome浏览器测试

    clientX,offsetX,pageX,screenX的异同 对于这个问题我相信有不少刚刚学习DOM事件的小伙伴可能会比较懵逼,首先我们从文字上解释它的异同 首先我们要明确对于浏览器而言,它的X还 ...

  5. 区分event对象中的[clientX,offsetX,screenX,pageX]

    前言 在平时的开发中,非常讨厌的就是兼容性了,兼容性的问题总会让我们记忆混淆,所以这次来区分一下event对象中的常用获取鼠标位置. clientX clientY event.clientX eve ...

  6. 图解Js event对象offsetX, clientX, pageX, screenX, layerX, x区别

    通过 3 张图和 1 张表格,轻松区别 Javascript Event 对象中的offsetX, clientX, pageX, screenX, layerX, x等属性. 一.测试代码如下: & ...

  7. PageX、clientX、screenX、offsetX、layerX的区别

    一.PageX和clientX PageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化 clientX:鼠标在页面上可视区域的位置,从浏览器可视区域左上角开始,即是 ...

  8. Js event对象offsetX, clientX, pageX, screenX, layerX, x区别(图解)

    简介 因为实际开发中,很少用到event对象的这几个值,每当写的时候又记不清,然后就要浪费时间去查找准确的资料,很是不爽,所以就做个记录~话不多说,直接上图(ps:图是网上找的,如果侵权,可立马删除) ...

  9. 一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别

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

最新文章

  1. 零基础学python全彩版实战答案-零基础学Python(全彩版)
  2. ORA-12638: 身份证明检索失败 的解决办法
  3. boost::geometry::make用法的测试程序
  4. SpringBoot profile配置
  5. 第五章 基元类型、引用类型、值类型 CLR学习第五课
  6. 算法提高 解二元一次方程组(java)
  7. 【转载】如何扎实的学好ABAP?我的个人经验
  8. 微信小程序API之getSystemInfo
  9. Linux系统磁盘管理基本知识
  10. 浅谈一下workstation
  11. Java定时任务调度框架
  12. 第二人生的源码分析(101)脚本的初步知识
  13. 无人驾驶失败案例汇总
  14. 电路基础-交流电-正弦量和相量
  15. h5封装去底部_贪婪洞窟H5:也出微信小游戏了!还是原来贪婪的味道
  16. 【算法】【递归与动态规划模块】两个字符串的最长公共子数组
  17. ISO体系认证办理流程及所需资料
  18. python: npy数据写入excel文件
  19. kalman、particle filter直白理解
  20. 自动出题软件--阶段性小结

热门文章

  1. [Leetcode] Copy list with random pointer 对带有任意指针的链表深度拷贝
  2. WebForm(文件上传)
  3. sql server服务看不到,显示为远程过程调用在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误10061...
  4. Dollar Dayz poj3181
  5. JQuery UI 1.8.13发布看看有哪些变动
  6. delphi 执行一个外部程序,当外部程序结束后言主程序立即响应
  7. Android中常见的MVC模式
  8. Shell笔记9——Shell数组的应用实践
  9. 搭建本地Yum软件源安装Cloudera Manager 5
  10. ERP的风险及其预防