js兼容所有浏览器的pageX和pageY属性

标题中的两个属性具有一定的浏览器兼容性问题。

不出所料,此兼容性问题是由IE9以下浏览器导致的。

但是由于考虑到低版本的IE浏览器用户尚多,所以本章节介绍一下如何实现兼容所有浏览器的pageX和pageY。

jQuery的兼容方式如下:

 

[JavaScript] 纯文本查看 复制代码

1

2

3

4

5

6

7

8

// Calculate pageX/Y if missing and clientX/Y available

 if ( event.pageX == null && original.clientX != null ) {

     eventDoc = event.target.ownerDocument || document;

     doc = eventDoc.documentElement;

     body = eventDoc.body;

     event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft||body&&body.clientLeft || 0 );

     event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );

 }

其实简单的实现方式就是鼠标相对于浏览器视口的偏移加上文档的滚动条隐藏的高度减去文档的clientTop。

代码如下:

 

[JavaScript] 纯文本查看 复制代码

1

var pageY = event.clientY +document.documentElement. scrollTop-document.documentElement.clientTop

为何要减去document.documentElement.clientTop

这是IE8之下浏览器特有的文档的偏移,即使设置html,body的padding和margin为0也不会影响其值。

在iE7下测试得到:

 

[JavaScript] 纯文本查看 复制代码

1

2

3

4

document.documentElement.clientTop//2px

document.documentElement.clientLeft //2px

document.bocy.clientTop//0px

document.body.clientLeft//0px

转载于:http://www.softwhy.com/article-5767-1.html 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值