Mam pole div (zwane flux) ze zmienną ilością treści w środku. W tym polu divbox ustawiono przepełnienie na automatyczne.
Teraz próbuję zrobić, gdy przewiń za pomocą przewiń na dół tego DIV-box, załaduj więcej treści na stronę, wiem jak to zrobić (załadować zawartość), ale nie wiem jak to zrobić wykryć, kiedy użytkownik przewinął do dołu tagu div? Gdybym chciał to zrobić dla całej strony, wziąłbym .scrollTop i odjąć to od .height.
Ale nie mogę tego tutaj zrobić?
Próbowałem pobrać .scrollTop z strumienia, a następnie zawinąć całą zawartość w div nazywany wewnętrznym, ale jeśli wezmę innerHeight strumienia, zwraca 564px (div jest ustawiony na 500 jako wysokość) i wysokość „wewnętrznego” zwraca 1064, a scrolltop, gdy na dole div mówi 564.
Co mogę zrobić?
źródło
innerHeight()
zgłaszanie miejsc po przecinku. W przypadku pomniejszenia użytkownika sumascrollTop()
iinnerHeight()
zawsze będzie przynajmniej o ułamek sekundy mniejszascrollHeight
. Skończyło się na dodaniu strefy buforowej o wielkości 20 pikseli. Otrzymany uzależniona byłaif(el.scrollTop() + el.innerHeight() >= el[0].scrollHeight - 20)
gdzieel
równa$(this)
.Znalazłem rozwiązanie, które po przewinięciu okna i wyświetleniu od dołu końca div wyświetla ostrzeżenie.
W tym przykładzie przewinięcie w dół po
.posts
zakończeniu funkcji div ( ) spowoduje wyświetlenie ostrzeżenia.źródło
var running = false
zadeklarowaną zmienną . Wewnątrz warunkowego sprawdzam Wif(!running) { running = true; // and continue logic }
ten sposób jest on wywoływany tylko raz! Po zakończeniu AJAX ustawrunning = false;
Chociaż pytanie zostało zadane 5,5 lat temu, nadal jest bardziej niż aktualne w kontekście dzisiejszego interfejsu użytkownika / interfejsu użytkownika. I chciałbym dodać moje dwa centy.
Źródło: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Determine_if_an_element_has_been_totally_scrolled
Niektóre elementy nie pozwalają na przewijanie pełnej wysokości elementu. W takich przypadkach możesz użyć:
źródło
Tylko dodatkowa uwaga tutaj, gdy znalazłem to, gdy szukam rozwiązania stałego diva, który chcę przewijać. W moim scenariuszu uznałem, że lepiej jest wziąć pod uwagę wypełnienie na div, aby móc dokładnie trafić do końca. Rozwijając odpowiedź @ Dr.Molle, dodaję:
To da ci dokładną lokalizację, w tym wypełnienie i obramowania
źródło
To zadziałało dla mnie
źródło
Jeśli potrzebujesz tego użyć na div, który ma przepełnienie-y jako ukryty lub przewijany, coś takiego może być tym, czego potrzebujesz.
Odkryłem, że pułap jest potrzebny, ponieważ zwój rekwizytu wydaje się zaokrąglać, a może z innego powodu powoduje to wyłączenie o mniej niż 1.
źródło
Jeśli nie używasz funkcji Math.round (), rozwiązanie sugerowane przez Dr.Molle nie będzie działać w niektórych przypadkach, gdy okno przeglądarki ma powiększenie.
Na przykład $ (this) .scrollTop () + $ (this) .innerHeight () = 600
$ (this) [0] .scrollHeight zwraca = 599,99998
600> = 599,99998 kończy się niepowodzeniem.
Oto poprawny kod:
Możesz także dodać dodatkowe piksele marginesów, jeśli nie potrzebujesz ścisłego warunku
źródło
W prostym użyciu DOM możesz sprawdzić warunek
jeśli to prawda, osiągnąłeś koniec.
źródło
Jeśli ktoś dostaje
scrollHeight
jakoundefined
, a następnie wybierz 1st podelement elementów:mob_top_menu[0].scrollHeight
źródło
nie jestem pewien, czy to jakaś pomoc, ale tak to robię.
Mam panel indeksu, który jest większy niż okno, i pozwalam mu się przewijać aż do końca tego indeksu. Potem naprawiam to na miejscu. Proces jest odwracany po przewinięciu w górę strony.
Pozdrowienia.
źródło
Chociaż zadawano to prawie 6 lat temu, wciąż gorący temat w projektowaniu UX, oto fragment demonstracyjny, jeśli jakiś początkujący chciałby użyć
źródło
To jest rozwiązanie problemu z powiększeniem, działa na wszystkich poziomach powiększenia, w razie potrzeby:
źródło
To jest kod na github.
źródło
Oto kolejna wersja.
Kluczowym kodem jest funkcja scroller (), która pobiera dane wejściowe jako wysokość div zawierającej przewijaną sekcję, używając funkcji przepełnienia: przewijania. Przybliża 5 pikseli od góry lub 10 pikseli od dołu, jak u góry lub u dołu. W przeciwnym razie jest zbyt wrażliwy. Wygląda na to, że 10 pikseli to minimum. Zobaczysz, że dodaje 10 do wysokości div, aby uzyskać dolną wysokość. Zakładam, że 5px może działać, nie testowałem zbytnio. YMMV. scrollHeight zwraca wysokość wewnętrznego obszaru przewijania, a nie wyświetlaną wysokość div, która w tym przypadku wynosi 400 pikseli.
źródło