fanta 寫:
代碼:
function func(targ)
{
var element = targ;
var xPos = targ.offsetLeft;
var yPos = targ.offsetTop;
while( targ = targ.offsetParent )
{
yPos += targ.offsetTop;
xPos += targ.offsetLeft;
}
document.getElementById(element.id+"div").style.left = xPos;
document.getElementById(element.id+"div").style.top = yPos;
}
我已經找到答案了,但是while迴圈在做什麼我就看不懂了,感覺這樣會變成無限回圈,小弟不才,知道的人麻煩解釋一下,謝謝。
他這是找累積座標的,先找目前元素的相對座標(相對,因為以母元素為參照),接著,往上一層,找母元素的相對座標,把這是些座標一個一個加起來,直到找不到母元素為止。
Prototype 這個 js lib 就有專門在處理
Position (位置)的函式,像剛剛提的,
cumulativeOffset:
代碼:
cumulativeOffset: function(element) {
var valueT = 0, valueL = 0;
do {
valueT += element.offsetTop || 0;
valueL += element.offsetLeft || 0;
element = element.offsetParent;
} while (element);
return [valueL, valueT];
}
雖然程式碼不大一樣,用的也是類似的機制。
如果寫很多跟 DOM 或 Ajax 有關的 JS,最好用個 JS 函式庫,比較有利。