Czy ktoś może mi pokazać, jak uzyskać pozycję top
& elementu lub , gdy nie jest on określony?left
div
span
to znaczy:
<span id='11a' style='top:55px;' onmouseover="GetPos(this);">stuff</span>
<span id='12a' onmouseover="GetPos(this);">stuff</span>
W powyższym, jeśli to zrobię:
document.getElementById('11a').style.top
Zwracana jest wartość 55px
. Jeśli jednak spróbuję tego dla span
„12a”, nic nie zostanie zwrócone.
Mam kilka div
/ span
s na stronie, dla których nie mogę określić top
/ left
properties, ale muszę wyświetlić div
bezpośrednio pod tym elementem.
źródło
Możesz wywołać metodę
getBoundingClientRect()
na odwołaniu do elementu. Następnie można zbadaćtop
,left
,right
i / lubbottom
właściwości ...Jeśli używasz jQuery, możesz użyć bardziej zwięzłego kodu ...
źródło
getBoundingClientRect()
Należy użyć +1 dla tej odpowiedzi - i to powinna być zaakceptowana odpowiedź! Ale nie potrzebujesz "nowoczesnej przeglądarki", aby to działało, zobacz listę kompatybilności, którą pokazałem tutaj: stackoverflow.com/questions/1480133/… . Działa dobrze w IE 4.0+ (!), Chrome 1.0+, FF 3.0+, Safari 4.0+ i Opera.getBoundingClientRect()
zwraca wartości względem rzutni, a nie dokumentu. W tym celu chciałbyś czegoś takiegotop = el.getBoundingClientRect().top + window.pageYOffset - el.ownerDocument.documentElement.clientTop
.getBoundingClientRect
bierzetransform
pod uwagę.Podczas gdy odpowiedź @ nickf działa. Jeśli nie interesują Cię starsze przeglądarki, możesz użyć tej czystej wersji Javascript. Działa w IE9 + i innych
źródło
Jak zauważył Alex, możesz użyć jQuery offset (), aby uzyskać pozycję względem przepływu dokumentu. Użyj position () dla jego współrzędnych x, y względem rodzica.
EDIT: Switched
document.ready
dlawindow.load
ponieważload
czeka na wszystkich elementach więc masz ich rozmiar zamiast po prostu przygotowuje DOM. Z mojego doświadczeniaload
wynika, że mniej elementów nieprawidłowo pozycjonowanych w Javascript jest mniej.źródło
Dla każdego, kto potrzebuje tylko górnej lub lewej pozycji, niewielkie modyfikacje czytelnego kodu @ Nickf załatwią sprawę.
i
źródło
Zdaję sobie sprawę, że to stary wątek, ale odpowiedź @alex musi być oznaczona jako poprawna
element.getBoundingClientRect()
jest dokładnym dopasowaniem do jQuery$(element).offset()
Jest kompatybilny z IE4 + ... https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect
źródło