Tworzę czat, używając żądań ajax w szynach i próbuję uzyskać div, aby przewinąć do dołu bez większego szczęścia.
Otaczam wszystko w tym div:
#scroll {
height:400px;
overflow:scroll;
}
Czy istnieje sposób, aby domyślnie przewijać go do dołu za pomocą JS?
Czy istnieje sposób, aby przewinąć go do dołu po żądaniu ajax?
javascript
html
ajax
dMix
źródło
źródło
Jest to o wiele łatwiejsze, jeśli używasz jQuery scrollTop :
źródło
$("#mydiv").scrollTop(function() { return this.scrollHeight; });
Możesz użyć następującego kodu:
Aby wykonać płynne przewijanie za pomocą JQuery:
Zobacz przykład na JSFiddle
Oto dlaczego to działa:
Ref: scrollTop , scrollHeight , clientHeight
źródło
za pomocą jQuery animate :
źródło
Działa z jQuery 1.6
https://api.jquery.com/scrollTop/
http://api.jquery.com/prop/
źródło
Nowsza metoda, która działa we wszystkich obecnych przeglądarkach :
źródło
płynne przewijanie za pomocą Javascript:
document.getElementById('messages').scrollIntoView({ behavior: 'smooth', block: 'end' });
źródło
Jeśli nie chcesz polegać
scrollHeight
, następujący kod pomaga:źródło
1E10
). Mniejsza liczba działaZa pomocą jQuery scrollTop służy do ustawienia pionowej pozycji paska przewijania dla dowolnego elementu. jest też ładna jquery scrollTo wtyczka używana do przewijania z animacją i różnymi opcjami ( dema )
jeśli chcesz użyć metody animacji jQuery do dodania animacji podczas przewijania w dół, sprawdź następujący fragment:
źródło
Napotkałem ten sam problem, ale z dodatkowym ograniczeniem: nie miałem kontroli nad kodem, który dołączał nowe elementy do kontenera przewijania. Żaden z przykładów, które tu znalazłem, nie pozwolił mi tego zrobić. Oto rozwiązanie, z którym skończyłem.
Wykorzystuje
Mutation Observers
( https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver ), co sprawia, że można go używać tylko w nowoczesnych przeglądarkach (choć istnieją wielopełniacze)Zasadniczo kod robi to tak:
Zrobiłem skrzypce, aby zademonstrować tę koncepcję: https://jsfiddle.net/j17r4bnk/
źródło
<div class="abc"><div data-bind=attr : {'id': myId } ></div></div>
tym kodzie myId jest zmienną. Jak mogę uzyskać dostęp do tego identyfikatora w skrypcie.JavaScript lub jquery:
Css:
źródło
Okazało się to bardzo pomocne, dziękuję.
Dla Angulara 1.X:
Tylko dlatego, że zawijanie elementów jQuery w porównaniu do elementów HTML DOM jest nieco mylące z kątowym.
Również w przypadku aplikacji do czatowania stwierdziłem, że wykonanie tego zadania po wczytaniu czatów jest przydatne, być może będziesz musiał także policzkować krótkie przerwy.
źródło
mały dodatek: przewija tylko, jeśli ostatni wiersz jest już widoczny. po lekkim przewinięciu pozostawia zawartość tam, gdzie jest (uwaga: nie testowano przy różnych rozmiarach czcionek. może to wymagać pewnych korekt wewnątrz „> = porównanie”):
źródło
Podobnie jak fragment kodu bonusowego. Używam kątowego i próbowałem przewinąć wątek wiadomości na dół, gdy użytkownik wybrał różne rozmowy z użytkownikami. Aby upewnić się, że przewijanie działa po załadowaniu nowych danych do div z powtórzeniem ng dla wiadomości, po prostu owiń fragment przewijania w limicie czasu.
Dzięki temu zdarzenie przewijania zostanie uruchomione po wstawieniu danych do DOM.
źródło
setTimeout(function() { ... }, n)
Możesz również, używając jQuery, dołączyć animację do
html,body
dokumentu poprzez:$("html,body").animate({scrollTop:$("#div-id")[0].offsetTop}, 1000);
co spowoduje płynne przewijanie na górę div z identyfikatorem „div-id”.
źródło
Skrypt Java:
document.getElementById('messages').scrollIntoView(false);
Przewija do ostatniego wiersza obecnej zawartości.
źródło
Umożliwi to przewinięcie do końca w odniesieniu do wysokości dokumentu
źródło
Bardzo prostą metodą jest ustawienie
scroll to
wysokości div.źródło
Przewiń do ostatniego elementu w div:
źródło
W aplikacji Angular 6 właśnie to zrobiłem:
Funkcja clearInterval (interwał) zatrzyma stoper, aby umożliwić ręczne przewijanie góra / dół.
źródło
Mój scenariusz: miałem listę ciągów, w których musiałem dołączyć ciąg podany przez użytkownika i automatycznie przewinąć na koniec listy. Miałem ustaloną wysokość wyświetlania listy, po której powinna się ona przelać.
Próbowałem odpowiedzi @Jeremy Ruten, zadziałało, ale przewijało się do (n-1) elementu. Jeśli ktoś ma tego typu problem, możesz skorzystać z
setTimeOut()
metody obejścia problemu. Musisz zmodyfikować kod poniżej:Oto utworzony przeze mnie link StcakBlitz, który pokazuje problem i jego rozwiązanie: https://stackblitz.com/edit/angular-ivy-x9esw8
źródło
Wiem, że to stare pytanie, ale żadne z tych rozwiązań mi nie wyszło. Skończyło się na użyciu offset (). Top, aby uzyskać pożądane wyniki. Oto, czego użyłem, aby delikatnie przewinąć ekran do ostatniej wiadomości w mojej aplikacji czatu:
Mam nadzieję, że to pomaga komuś innemu.
źródło
Czasami najprostsze jest najlepsze rozwiązanie: nie wiem, czy to pomoże, pomogło mi to przewinąć tam, gdzie chciałem. Im wyższa jest „y =”, tym bardziej przewija się w dół i oczywiście „0” oznacza górę, więc na przykład „1000” może być na dole, „2000” lub „3000” itd., W zależności od tego, jak długo strona jest. Zwykle działa to w przycisku z przyciskiem onclick lub onmouseover.
źródło
Ustaw odległość od góry przewijanego elementu jako całkowitą wysokość elementu.
źródło
Możesz użyć metody HTML DOM scrollIntoView w następujący sposób:
źródło
posługiwać się :
lub zaznacz przewiń do dołu:
źródło
Jeśli odbywa się to w celu przewinięcia do dołu okna czatu, wykonaj następujące czynności
Pomysł przewinięcia do konkretnego diva na czacie był następujący
1) Każdy dział czatu składający się z Osoby, godziny i wiadomości jest uruchamiany w pętli for z klasą chatContentbox
2) querySelectorAll znajdzie wszystkie takie tablice. Może to być 400 węzłów (400 czatów)
3) przejdź do ostatniego
4) scrollIntoView ()
źródło
scrollIntoView
, więc nie trzeba dodawać jeszcze jednego.