Chcę uzyskać pozycję elementu względem rzutni przeglądarki (rzutnia, w którym wyświetlana jest strona, a nie cała strona). Jak można to zrobić w JavaScript?
Wielkie dzięki
javascript
Waleed Eissa
źródło
źródło
Odpowiedzi:
Istniejące odpowiedzi są teraz nieaktualne. Metoda rodzima
getBoundingClientRect()
istnieje już od jakiegoś czasu i robi dokładnie to, o co chodzi w pytaniu. Dodatkowo jest obsługiwany we wszystkich przeglądarkach (w tym IE 5, jak się wydaje!)Ze strony MDN :
Zwracana wartość jest obiektem TextRectangle, który zawiera właściwości tylko do odczytu left, top, right i bottom opisujące ramkę (w pikselach), z lewym górnym względem lewego górnego obszaru widoku .
Używasz tego w ten sposób:
źródło
getBoundingClientRect().top
nie ma w moim IE11, zwraca 0. Masz jakieś rozwiązanie.W moim przypadku, dla pewności co do przewijania, do równania dodałem okno window.scroll:
To pozwala mi uzyskać rzeczywistą względną pozycję elementu w dokumencie, nawet jeśli został przewinięty.
źródło
getBoundingClientRect().top
nie ma w moim IE11, zwraca 0. Masz jakieś rozwiązanie.window.scrollY || window.pageYOffset
może poprawić wsparcieEdycja: Dodaj kod do konta do przewijania strony.
Argument id to identyfikator elementu, którego offset chcesz. Zaczerpnięte z dziwacznego postu .
źródło
źródło
Możesz spróbować:
node.offsetTop - window.scrollY
Działa w przeglądarce Opera ze zdefiniowanym metatagiem viewport.
źródło
offsetTop
to jest względem najbliższego pozycjonowanego elementu. Który, w zależności od struktury strony, może być elementem głównym lub nie.jQuery implementuje to dość elegancko. Jeśli spojrzysz na źródło jQuery
offset
, zauważysz, że jest w zasadzie tak zaimplementowany:źródło
Funkcja na tej stronie zwróci prostokąt z górną, lewą, współrzędnymi wysokości i szerokości przekazanego elementu względem portu widoku przeglądarki.
źródło
źródło
źródło
Dzięki za wszystkie odpowiedzi. Wygląda na to, że Prototype ma już funkcję, która to robi (funkcja page ()). Przeglądając kod źródłowy funkcji stwierdziłem, że najpierw oblicza on przesunięcie elementu względem strony (tj. Do góry dokumentu), a następnie odejmuje od tego scrollTop. Więcej szczegółów w kodzie źródłowym prototypu.
źródło
Zakładam, że na
btn1
stronie internetowej istnieje element o identyfikatorze , a także, że zawiera jQuery. Działa to we wszystkich nowoczesnych przeglądarkach Chrome, FireFox, IE> = 9 i Edge. jQuery jest używany tylko do określenia pozycji względem dokumentu.źródło
Czasami
getBoundingClientRect()
wartość właściwości obiektu pokazuje 0 dla IE. W takim przypadku musisz ustawićdisplay = 'block'
dla elementu. Możesz użyć poniższego kodu dla wszystkich przeglądarek, aby uzyskać przesunięcie.Rozszerz funkcjonalność jQuery:
Posługiwać się :
źródło