Html中Document和Event里各种坐标的定义

本文转自:http://hi.baidu.com/gle_el/blog/item/43d0f6f464577a68dcc47431.html

 

event.x   ,event.y:与触发事件的对象相关的鼠标位置的XY坐标;


offsetTop
获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算顶端位置。

offsetLeft
获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置。

offsetHeight
获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度。
IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。 
NS、FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。

offsetWidth
获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的宽度。

offsetParent
获取定义对象 offsetTop 和 offsetLeft 属性的容器对象的引用。

clientHeight
获取对象的高度,不计算任何边距、边框、滚动条或可能应用到该对象的补白。
大家对 clientHeight 都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,一般是最后一个工具条以下到状态栏以上的这个区域,与页面内容无关。

clientLeft
获取 offsetLeft 属性和客户区域的实际左边之间的距离。

clientTop
获取 offsetTop 属性和客户区域的实际顶端之间的距离。

clientWidth
获取对象的宽度,不计算任何边距、边框、滚动条或可能应用到该对象的补白。
SCROLL属性
scroll
设置或获取滚动是否关闭。

scrollHeight
获取对象的滚动高度。

scrollLeft
设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离。

scrollTop
设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离。

scrollWidth
获取对象的滚动宽度。event属性
x
设置或获取鼠标指针位置相对于父文档的 x 像素坐标。

screenX
设置或获取获取鼠标指针位置相对于用户屏幕的 x 坐标

offsetX
设置或获取鼠标指针位置相对于触发事件的对象的 x 坐标。

clientX
设置或获取鼠标指针位置相对于窗口客户区域的 x 坐标,其中客户区域不包括窗口自身的控件和滚动条

我们这里说说四种浏览器对 document.body 的 clientHeight、offsetHeight 和 scrollHeight 的解释,这里说的是 document.body,如果是 HTML 控件,则又有不同,点击这里查看。
这四种浏览器分别为IE(Internet Explorer)、NS(Netscape)、Opera、FF(FireFox)。
clientHeight
大家对 clientHeight 都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,一般是最后一个工具条以下到状态栏以上的这个区域,与页面内容无关。
offsetHeight
IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。 NS、FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。
scrollHeight
IE、Opera 认为 scrollHeight 是网页内容实际高度,可以小于 clientHeight。 NS、FF 认为 scrollHeight 是网页内容高度,不过最小值是 clientHeight。 简单地说
clientHeight 就是透过浏览器看内容的这个区域高度。


NS、FF 认为 offsetHeight 和 scrollHeight 都是网页内容高度,只不过当网页内容高度小于等于 clientHeight 时,scrollHeight 的值是 clientHeight,而 offsetHeight 可以小于 clientHeight。
IE、Opera 认为 offsetHeight 是可视区域 clientHeight 滚动条加边框。scrollHeight 则是网页内容实际高度。
同理
clientWidth、offsetWidth 和 scrollWidth 的解释与上面相同,只是把高度换成宽度即可。 
但是
FF 在不同的 DOCTYPE 中对 clientHeight 的解释不同, xhtml 1 trasitional 中则不是如上解释的。其它浏览器则不存在此问题。

 

     因为现在常用主流浏览器对W3C准的不完全遵守,导致了书写js脚本经常要专注兼容问题,这也是现在js框架流行的一个原因。而鼠标位置相对于document对象的获取更是其中的代表,那真是诸侯割剧,群雄逐鹿,相当的混乱呀。
      据俺查资料所知,能用的得到鼠标的属性有如下六大对:
  

1   clientX,clientY
2   layerX,layerY
3   offsetX,offsetY
4   pageX,pageY
5   screenX,screenY
6   x,y


     如果说没得用令人头疼,那么有太多可用,那个又不好用就令人恼火了。但对于我等要靠coding来养家糊口的,没困难要上,有困难睁着通红的双眼也要上。
     开始分析之前,必须明确要获取的鼠标坐标是相对于document的,因为,js编程都是操作dom对象,所以得到document才有意义。下面开始分析解决之道。


     首先,最好的情况下,老版本的Netscape提供了pageX和pageY这一对属性,并且得到的x,y坐标刚好是相对于document而言。所以对于这类情况,代码如此:

1   if ( ! e)  var  e  =  window.Event;
2   var  x  =  e.pageX;
3   ar  y  =  e.pageY;


     现在考虑不太理想的情况,对于不提供pageX和pageY的浏览器。它们大多支持clientX/Y属性,但都是相对于window的坐标值。所以要取得适合自己用的坐标还需要处理:

1     if ( ! e)  var  e  =  window.Event;
2     var  x  =  e.clientX  +  document.documentElement.scrollLeft;
3     var  y  =  e.clientY  +  document.documentElement.scrollTop;

 

    综合两种情况,可以写一个兼容大多数主流浏览器的方法得到鼠标坐标

 

1    if ( ! e)  var  e  =  window.Event;
2     var  x  =  e.pageX  || (e.clientX ? e.clientX + document.documentElement.scrollLeft: 0 );
3     var  y  =  e.pageY  || (e.clientY ? e.clientY + document.documentElement.scrollTop: 0 );
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值