offset
在所有的浏覽器裡面元素的offsetTop和offsetLeft兩個屬性都是很有用的。他們會給出你元素相對於父元素的坐標位置。
這段代碼會向上查找offsetParent,然後添加offsetTop和offsetLeft。最終無論offsetParent在哪,他都會給出你元素在屏幕上的真正坐標。
解釋
這段代碼非常簡單。先傳入要計算的元素,然後設置變量curleft和curtop為0。
復制代碼 代碼如下: function findPos(obj) {
var curleft = curtop = 0;
如果浏覽器支持offsetParent:
復制代碼 代碼如下: if (obj.offsetParent) {
每次我們找到一個新的對象的時候,把他的offsetTop和offsetLeft加到curtop和curleft上:
復制代碼 代碼如下: do {
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
小技巧:返回'='的值
下面就是這個技巧:
復制代碼 代碼如下: } while (obj = obj.offsetParent);
這個不是表達式錯誤。我不想用'=='來比較obj和obj.offsetParent(那也沒有用,因為一個元素肯定和他的父元素不相等)。
所以我用'='來把obj.offsetParent的值傳遞給obj。在這裡我對這個技巧有詳細的解釋。
簡單的返回
這個循環會當元素沒有了offsetParent的時候結束。當offsetParent存在的時候,就依然會把offsetLeft加到curleft上,把offsetTop加到curtop上。
當循環技術的時候,我們就把坐標返回給調用這個函數的程序。
復制代碼 代碼如下: return [curleft,curtop];}
翻譯地址:http://www.quirksmode.org/js/findpos.html
轉載請保留以下信息
作者:北玉(tw:@rehawk)