這不會與"How to tell if a DOM element is visible?"如何判斷是否顯示DOM元素?
我想確定給定的DOM元素是否在頁面上可見。 例如如果該元素是設置了display:none;
的父級的子元素,則該元素將不可見。
(這有什麼好做的元素是否是在視口中與否)
我可以通過元素的每個父迭代,檢查display
的風格,但我想知道是否有更直接的方式?
這不會與"How to tell if a DOM element is visible?"如何判斷是否顯示DOM元素?
我想確定給定的DOM元素是否在頁面上可見。 例如如果該元素是設置了display:none;
的父級的子元素,則該元素將不可見。
(這有什麼好做的元素是否是在視口中與否)
我可以通過元素的每個父迭代,檢查display
的風格,但我想知道是否有更直接的方式?
從Firefox的快速測試中,它看起來像大小和位置屬性(clientWidth,offsetTop等)全部返回0時,父元素被隱藏display:none
。
使用Prototype:
if($('someDiv').visible) {...}
如果您已經提供了Prototype的這個函數的源代碼,以顯示它如何實際完成,那將會更有幫助。 – 2008-12-04 15:47:29
我只使用庫。我沒有寫。 – 2008-12-04 17:48:30
由於我使用的是MochiKit,我想出了基於螞蟻普的回答是:
getElementPosition('mydiv').y != 0
我也可以檢查它是否在視(垂直)通過:
y = getElementPosition('mydiv').y
(y < getViewportPosition().y + getViewportDimensions().h &&
getViewportPosition().y < y)
順便說一句,這也適用於IE6。
依靠位置爲0是脆弱的。你最好寫一個輔助函數來遍歷父母直接檢查他們的顯示風格。
這裏的迭代求解 -
var elementShown = function(e){
if (e == document)
return true;
if ($(e).css('display') == 'none') //or whatever your css function is
return false;
return elementShown(e.parentNode);
}
好主意。甚至可以指定:http://www.w3.org/TR/cssom-view/#offset-attributes – Kornel 2008-12-03 00:15:16
在當前的CSSOM View Module草案(2013)中,@Kornel發佈的鏈接不再指向正確的部分。查看[w3.org/TR/cssom-view/#dom-htmlelement-offsettop](http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop)。 – falconepl 2015-10-10 18:15:56