Muszę wykryć, czy użytkownik jest przewijany na dół strony. Jeśli znajdują się na dole strony, gdy dodam nową treść na dole, automatycznie przewijam je do nowego dołu. Jeśli nie znajdują się na dole, czytają poprzednią treść wyżej na stronie, więc nie chcę ich automatycznie przewijać, ponieważ chcą pozostać tam, gdzie są.
Jak mogę wykryć, czy użytkownik jest przewinięty na dół strony lub czy przewinął wyżej na stronie?
javascript
Andrzej
źródło
źródło
Odpowiedzi:
Zobacz demo
źródło
document.documentElement.scrollTop
zamiastwindow.scrollY
dla IE. Nie jestem pewien, które wersje IE obsługująwindow.scrollY
.Zaktualizowany kod do obsługi wszystkich głównych przeglądarek (w tym IE10 i IE11)
Problem z obecnie akceptowaną odpowiedzią polega na tym, że
window.scrollY
nie jest ona dostępna w IE.Oto cytat z mdn dotyczący scrollY:
I działający fragment kodu:
Pokaż fragment kodu
Uwaga dla komputerów Mac
Na podstawie komentarza @ Raphaëla wystąpił problem w systemie Mac z powodu niewielkiego przesunięcia.
Działa następujący zaktualizowany warunek:
źródło
(window.innerHeight + window.pageYOffset) >= document.body.offsetHeight - 2
(window.innerHeight + Math.ceil(window.pageYOffset + 1)) >= document.body.offsetHeight
.Przyjęta odpowiedź nie działała dla mnie. To spowodowało:
Jeśli chcesz obsługiwać starsze przeglądarki (IE9), użyj aliasu,
window.pageYOffset
który ma nieco lepszą obsługę.źródło
Szukałem odpowiedzi, ale nie znalazłem dokładnej. Oto czyste rozwiązanie javascript, które działa z najnowszymi przeglądarkami Firefox, IE i Chrome w momencie odpowiedzi:
źródło
((document.documentElement && document.documentElement.scrollHeight) || document.body.scrollHeight)
zamiast po prostudocument.body.scrollHeight
uwzględnić przypadki, w których html / body są ustawione na wysokość: 100%To działa
Jeśli szukasz wsparcia starszych przeglądarek (IE9) zastąpić window.scrollY z window.pageYOffset
źródło
Właśnie zacząłem na to patrzeć, a odpowiedzi tutaj mi pomogły, więc dziękuję za to. Rozbudowałem się trochę, aby kod był bezpieczny aż do IE7:
Mam nadzieję, że okaże się to przydatne dla kogoś.
Masz skrzypce;)
źródło
Jeśli korzystasz
height: 100%
z jakiegoś kontenera<div id="wrapper">
, działa następujący kod (testowany w Chrome):źródło
Ta odpowiedź naprawi przypadki na krawędzi, ponieważ
pageYOffset
jest todouble
czasinnerHeight
ioffsetHeight
sąlong
, więc kiedy przeglądarka podaje informacje, możesz mieć krótki piksel. Na przykład: u dołu strony mamyprawdziwe
window.innerHeight = 10.2
prawdziwe
window.pageYOffset = 5.4
prawdziwe
document.body.offsetHeight = 15.6
Nasze obliczenia stają się wtedy: 10 + 5,4> = 16, co jest fałszem
Aby to naprawić, możemy zrobić
Math.ceil
napageYOffset
wartości.Mam nadzieję, że to pomaga.
źródło
jeśli kochasz jquery
źródło
Możesz zajrzeć do nieskończonego zwoju jquery:
http://www.infinite-scroll.com/infinite-scroll-jquery-plugin/
Brzmi to tak, jakby robiło to, o co prosisz, zakładając, że chcesz korzystać z biblioteki jquery i nie licząc na czystą metodę JS.
źródło
Zaskakujące, że żadne z rozwiązań nie działało dla mnie. Myślę, że to dlatego, że mój
css
został zawalony ibody
nie zawinął całej zawartości podczas używaniaheight: 100%
(jeszcze nie wiem dlaczego). Jednak szukając rozwiązania, wymyśliłem coś dobrze ... zasadniczo to samo, ale może warto przyjrzeć się - jestem nowy w programowaniu, więc przepraszam, jeśli działa tak samo wolniej, jest mniej obsługiwany lub coś w stylu że...źródło
źródło
Ten kod działał również dla mnie w Firefox i IE.
źródło
Korzystanie z wbudowanego fragmentu kodu funkcjonalnego
defaultView
i korzystaniedocumentElement
z niego:źródło
Możesz sprawdzić, czy łączny wynik wysokości okna i góry przewijania jest większy niż ciała
if (window.innerHeight + window.scrollY >= document.body.scrollHeight) {}
źródło
Musiałem wymyślić sposób (w Javie), aby systematycznie przewijać w dół w poszukiwaniu komponentu, dla którego nie znałem prawidłowej XPath (długa historia, więc po prostu graj dalej). Jak właśnie powiedziałem, musiałem przewinąć w dół, szukając komponentu i zatrzymać się, gdy komponent zostanie znaleziony lub dojdzie do dołu strony.
Poniższy fragment kodu steruje przewijaniem w dół do dołu strony:
Nawiasem mówiąc, okno jest zmaksymalizowane przed wykonaniem tego fragmentu kodu.
źródło
Przyjęta odpowiedź nie działała dla mnie. To spowodowało:
źródło
Dwa rozwiązania, które okazały się dla mnie skuteczne:
I inni:
źródło