Element.offsetHeight pro viditelnost

Jedním z (vnímaných) záludných úkolů v rámci frontendového kódování je kontrola, zda je prvek viditelný nebo ne. Velmi naivní způsob, jak zkontrolovat, zda je prvek viditelný (tj. zda je přítomen nebo zabírá místo na stránce), je kontrola jeho hodnoty stylu zobrazení:

var incorrectIsVisible = window.getComputedStyle(someElement, null).getPropertyValue('display'); // "inline", "inline-block", "block", etc.

Všimněte si, že nejsem zkontrolovat také neprůhlednost, protože neviditelný prvek stále zabírá místo na obrazovce. Problém s výše uvedeným kódem je, že můžete získat styl potomka, ale to nemusí záležet, pokud je jeho rodič nastaven na display: none . Pokud je například display dítěte hodnota stylu je inline-block , ale nadřazený prvek prvku display styl je none , podřízený prvek stále není viditelný. Kupodivu kontrola offsetHeight podřízeného prvku hodnota bude signalizovat, pokud je prvek pravděpodobně viditelný:

var correctIsVisible = someElement.offsetHeight; // 0 for hidden, more than 0 for displaying

Pokud je prvek potomkem prvku, který je display: none , offsetHeight bude 0, takže víte, že prvek není viditelný navzdory jeho display hodnota. Opět si pamatujte, že se nebere v úvahu neprůhlednost a prvek, který je opacity: 0 je stále technicky viditelný a zabírá místo.