2013-06-27 102 views
2

我想確定什麼是最好的方式來知道元素相對於另一個元素的「視覺」位置(不是DOM樹位置)。如何確定HTML元素是否可視化到其他元素的左側,右側,頂部或底部?

例如,我有一個元素數組,並且有一個選定的元素,並且想知道哪些元素在視覺上位於所選元素的右側。還請注意,元素可以是任何標籤類型,並且可以具有任何位置(相對,絕對,固定)和顯示(只要它是可見的)。

歡迎任何jQuery解決方案。

+2

那麼,你有什麼嘗試? –

+3

['.offset()'](http://api.jquery.com/offset/) – SpYk3HH

+1

獲取要比較的元素的位置和使用'position()進行比較的元素並進行比較。 –

回答

3

爲什麼不能簡單地用element.offsetTopelement.offsetLeft其中offsetTop是y軸,和offsetLeft是x軸。
根本不需要jQuery,但如果你堅持$(element).offset();可能會。

請注意,窗口的左上角是0-0點。元素「卡住」左側將有offsetLeft === 0,頂部的元素有offsetTop === 0。這是所有有過,真的

針對zeaklous'評論:
要獲得尺寸對象的

var dimension = {top: {x: element.offsetLeft, y: element.offsetTop}, 
       bottom: {x: element.offsetWidth, y: element.offsetHeight} 
}; 

被告知,該offsetWidthoffsetHeight已經知道返回0在某些情況下,DOM剛剛重繪(從剛剛更改的元素中獲取這些屬性可能會導致此問題)。
爲了避免這種情況,有些人在獲取他們懷疑可能剛被更改的元素的偏移時傾向於使用setTimeout();

在迴應的意見,我已經指出,你可以簡單地使用getBoundingClientRect以避免與offsetX性質的任何問題:

document.getElementById('foo').getBoundingClientRect(); 

這將返回ClientRect對象的實例,與您可以玩。 Check MDN for details

+2

你可能還會提到它只是給出了對象的起始位置。如果一個物體在另一個物體內,那麼它可能會比第一個物體更晚(如x或y),但也會在第一個結束之前結束。您可以通過將對象的寬度添加到'offsetLeft'並將對象的高度添加到'offsetTop'來檢查是否是這種情況。 –

+0

@Zeaklous:我已經着手發佈一個來自舊標籤雲腳本的片段我寫了一些但是這會讓我們離OP的實際需要太遠(只知道元素的位置),這會讓他無事可做。計算不同z軸上元素的碰撞...哦,我有什麼好玩的:P –

+0

是的,Zeaklous的評論中的代碼範圍「offsetLeft」有一個89的偏移量,但OP下的「add comment」鏈接的值爲199.上面的其他東西怎麼能有更高的y軸? – dandavis

相關問題