pageX,clientX,offsetX,layerX的区别
在各个浏览器的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的区别相关推荐
- pageX clientX offsetX之间的区别
鼠标在页面中的定位有pageX pageY clientX clientY offsetX offsetY等,总是分不清楚这几个之间有什么区别,写一篇文章作为备忘录 clientX和clie ...
- pageX,clientX,offsetLeft,scrollLeft的区别
pageX,clientX,offsetLeft,scrollLeft的区别 1.pageX / pageY pageX / pageY的值为鼠标相对于document的距离,即网页左上角的位置 2. ...
- screenX、client X、pageX、offsetX、layerX
screenX, client X screenX: 鼠标在屏幕中的水平坐标 client X: 鼠标在客户端区域(浏览器可视区域)的水平坐标,不论页面是否有水平滚动 pageX 相对于整个文档的x( ...
- clientX,offsetX,pageX,screenX的异同以Chrome浏览器测试
clientX,offsetX,pageX,screenX的异同 对于这个问题我相信有不少刚刚学习DOM事件的小伙伴可能会比较懵逼,首先我们从文字上解释它的异同 首先我们要明确对于浏览器而言,它的X还 ...
- 区分event对象中的[clientX,offsetX,screenX,pageX]
前言 在平时的开发中,非常讨厌的就是兼容性了,兼容性的问题总会让我们记忆混淆,所以这次来区分一下event对象中的常用获取鼠标位置. clientX clientY event.clientX eve ...
- 图解Js event对象offsetX, clientX, pageX, screenX, layerX, x区别
通过 3 张图和 1 张表格,轻松区别 Javascript Event 对象中的offsetX, clientX, pageX, screenX, layerX, x等属性. 一.测试代码如下: & ...
- PageX、clientX、screenX、offsetX、layerX的区别
一.PageX和clientX PageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化 clientX:鼠标在页面上可视区域的位置,从浏览器可视区域左上角开始,即是 ...
- Js event对象offsetX, clientX, pageX, screenX, layerX, x区别(图解)
简介 因为实际开发中,很少用到event对象的这几个值,每当写的时候又记不清,然后就要浪费时间去查找准确的资料,很是不爽,所以就做个记录~话不多说,直接上图(ps:图是网上找的,如果侵权,可立马删除) ...
- 一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别
先总结下区别:event.clientX.event.clientY鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性event. ...
最新文章
- 零基础学python全彩版实战答案-零基础学Python(全彩版)
- ORA-12638: 身份证明检索失败 的解决办法
- boost::geometry::make用法的测试程序
- SpringBoot profile配置
- 第五章 基元类型、引用类型、值类型 CLR学习第五课
- 算法提高 解二元一次方程组(java)
- 【转载】如何扎实的学好ABAP?我的个人经验
- 微信小程序API之getSystemInfo
- Linux系统磁盘管理基本知识
- 浅谈一下workstation
- Java定时任务调度框架
- 第二人生的源码分析(101)脚本的初步知识
- 无人驾驶失败案例汇总
- 电路基础-交流电-正弦量和相量
- h5封装去底部_贪婪洞窟H5:也出微信小游戏了!还是原来贪婪的味道
- 【算法】【递归与动态规划模块】两个字符串的最长公共子数组
- ISO体系认证办理流程及所需资料
- python: npy数据写入excel文件
- kalman、particle filter直白理解
- 自动出题软件--阶段性小结
热门文章
- [Leetcode] Copy list with random pointer 对带有任意指针的链表深度拷贝
- WebForm(文件上传)
- sql server服务看不到,显示为远程过程调用在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误10061...
- Dollar Dayz poj3181
- JQuery UI 1.8.13发布看看有哪些变动
- delphi 执行一个外部程序,当外部程序结束后言主程序立即响应
- Android中常见的MVC模式
- Shell笔记9——Shell数组的应用实践
- 搭建本地Yum软件源安装Cloudera Manager 5
- ERP的风险及其预防