用getBoundingClientRect()来获取页面元素的位置
以前绝大多数的使用下面的代码来获取页面元素的位置:
1.var _x = 0, _y = 0; 2.do{ 3._x += el.offsetLeft; 4._y += el.offsetTop; 5.}while(el=el.offsetParent); 6.return {x:_x,y:_y};这里有个”offsetParent”问题,所以要写很多兼容的代码,经过不懈的查找终于找到getBoundingClientRect();该方法获得页面中某个元素的左,上,右和下分别相对浏览器视窗的位置,他返回的是一个对象,即Object,该对象有是个属性:top,left,right,bottom;这里的top、left和css中的理解很相似,但是right,bottom和css中的理解有点不一样,看示意图:
以前getBoundingClientRect()是IE特有的,目前FF3+,opera9.5+,safari 4,都已经支持这个方法。
可以滚动滚动条之后点红色区域看各个值的变化:
01.< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 02.  03.<html xmlns="http://www.w3.org/1999/xhtml"> 04.  05.<head> 06.  07.<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 08.  09.<title>Demo</title> 10.  11.</head> 12.  13.<body style="width:2000px; height:1000px;"> 14.  15.<div id="demo" style="position:absolute; left:518px; right:100px; width:500px; height:500px; background:#CC0000; top: 114px;">Demo为了方便就直接用绝对定位的元素</div> 16.  17.<script type="text/javascript"> 18.  19.<span style="white-space: pre;"> </span>document.getElementById('demo').onclick = function() { 20.  21.if (document.documentElement.getBoundingClientRect) { 22.  23.alert("left:" + this.getBoundingClientRect().left); 24.  25.alert("top:" + this.getBoundingClientRect().top); 26.  27.alert("right:" + this.getBoundingClientRect().right) 28.  29.alert("bottom:" + this.getBoundingClientRect().bottom); 30.  31.var X = this.getBoundingClientRect().left + document.documentElement.scrollLeft; 32.  33.var Y = this.getBoundingClientRect().top + document.documentElement.scrollTop; 34.  35.alert("Demo的位置是X:" + X + ";Y:" + Y) 36.  37.} 38.  39.} 40.  41.</script> 42.  43.</body> 44.  45.</html>有了这个方法,获取页面元素的位置就简单多了,
var X= this.getBoundingClientRect().left+document.documentElement.scrollLeft;
var Y =this.getBoundingClientRect().top+document.documentElement.scrollTop;
 
                    
                


 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号