Mam przewijany div
i chcę mieć link, kiedy go kliknę, wymusi to div
przewinięcie w celu wyświetlenia elementu wewnątrz. Napisałem JavasSript w ten sposób:
document.getElementById(chr).scrollIntoView(true);
ale to przewija całą stronę podczas przewijania div
samej strony. Jak to naprawić?
Chcę to tak powiedzieć
MyContainerDiv.getElementById(chr).scrollIntoView(true);
javascript
html
scroll
Amr Elgarhy
źródło
źródło
SetTimeout
w$(document).ready({})
funkcji i ustawiamfocus()
element, do którego chcesz przewinąć. Działa dla mnieOdpowiedzi:
Musisz uzyskać górne przesunięcie elementu, który chcesz przewinąć, względem jego elementu nadrzędnego (przewijanego kontenera div):
Zmienna topPos jest teraz ustawiona na odległość między górną częścią przewijanego elementu div a elementem, który ma być widoczny (w pikselach).
Teraz mówimy elementowi DIV, aby przewinął do tej pozycji za pomocą
scrollTop
:Jeśli używasz prototypowego frameworka JS, zrobiłbyś to samo:
Ponownie, spowoduje to przewinięcie elementu div, tak aby element, który chcesz zobaczyć, znajdował się dokładnie na górze (lub jeśli nie jest to możliwe, przewinięty tak głęboko, jak to możliwe, aby był widoczny).
źródło
myElement.offsetTop
reflow wyzwoli (cięgi układ), która mogłaby być wąskim gardłem wydajnościposition: relative
przeciwnym razie spędzisz dużo czasu na debugowaniu, tak jak właśnie to zrobiłem.overflow-y
właściwośćscroll
dla elementu nadrzędnego (scrolling_div
), w przeciwnym razie nie działała. Domyślna wartość css dlaoverflow
właściwości toauto
i chociaż umożliwia również ręczne przewijanie, kod js nie działałby (nawet z{psition: relative}
…)h4
adiv
potemarticle
tag iarticle
działało tylko dla mnie.Musiałbyś znaleźć pozycję elementu w DIV, do którego chcesz przewinąć, i ustawić właściwość scrollTop.
Aktualizacja :
Przykładowy kod do poruszania się w górę lub w dół
źródło
Metoda 1 - Płynne przewijanie do elementu wewnątrz elementu
Metoda 2 - Korzystanie z Element.scrollIntoView :
Metoda 3 - Używanie zachowania przewijania CSS :
źródło
Aby przewinąć element do widoku div, tylko w razie potrzeby, możesz użyć tej
scrollIfNeeded
funkcji:źródło
Kod powinien być:
Chcesz przewinąć różnicę między górną pozycją podrzędną a najwyższą pozycją div.
Uzyskaj dostęp do elementów potomnych za pomocą:
i tak dalej....
źródło
var chElem = document.getElementById('element_within_div');
a trzecia linia czytaćvar topPos = divElem.offsetTop;
?Jeśli korzystasz z jQuery, możesz przewijać animację za pomocą:
Animacja jest opcjonalna: możesz również wziąć obliczoną powyżej wartość scrollTop i umieścić ją bezpośrednio we właściwości scrollTop kontenera .
źródło
Natywny JS, Cross Browser, Smooth Scroll (aktualizacja 2020)
Ustawienie
ScrollTop
daje pożądany rezultat, ale przewijanie jest bardzo gwałtowne. Używaniejquery
płynnego przewijania nie wchodziło w grę. Oto natywny sposób wykonania zadania, który obsługuje wszystkie główne przeglądarki. Odniesienie - caniuseOtóż to!
A oto działający fragment dla wątpliwych -
Aktualizacja: Jak widać w komentarzach, wygląda na to, że
Element.scrollTo()
IE11 nie jest obsługiwany. Więc jeśli nie obchodzi cię IE11 (naprawdę nie powinieneś), możesz go używać we wszystkich swoich projektach. Zauważ, że istnieje wsparcie dla Edge! Więc tak naprawdę nie pozostawiasz użytkowników Edge / Windows w tyle;)Odniesienie
źródło
scrollTo()
może być obsługiwany we wszystkich głównych przeglądarkach dlaWindow
obiektów, ale nie jest obsługiwany w IE lub Edge dla elementów.window.scrollTo
nieElement.scrollTo
. Wypróbuj na przykład w Edge i sprawdź konsolę: codepen.io/timdown/pen/abzVEMBIstnieją dwa fakty:
1) Component scrollIntoView nie jest obsługiwany przez safari.
2) JS framework jQuery może wykonać to zadanie:
źródło
Oto proste rozwiązanie w czystym języku JavaScript, które działa w przypadku docelowej liczby (wartości
scrollTop
), docelowego elementu DOM lub niektórych specjalnych przypadków typu String:A oto kilka przykładów użycia:
lub
lub
źródło
Kolejny przykład wykorzystania jQuery i animate.
źródło
Przewijanie animowane przez użytkownika
Oto przykład, jak programowo przewijać w
<div>
poziomie, bez JQuery . Aby przewijać w pionie, należy wymienić pisze JavaScript w przeglądarce, byscrollLeft
zescrollTop
zamiast.JSFiddle
https://jsfiddle.net/fNPvf/38536/
HTML
JavaScript
Kredyt dla Dux .
Automatyczne przewijanie animowane
Ponadto są tutaj funkcje umożliwiające przewijanie w
<div>
pełni w lewo iw prawo. Jedyną rzeczą, którą tutaj zmieniamy, jest sprawdzenie, czy pełne rozszerzenie zwoju zostało wykorzystane przed ponownym wywołaniem rekurencyjnego przewijania.JSFiddle
https://jsfiddle.net/0nLc2fhh/1/
HTML
JavaScript
źródło
To właśnie mi w końcu służyło
źródło
przeglądarka przewija automatycznie do elementu, który ma fokus, więc co możesz zrobić, aby zawinąć element, do którego
<a>...</a>
chcesz przewinąć, a kiedy potrzebujesz przewijania, po prostu ustaw na tym fokusa
źródło
Po wybraniu elementu wystarczy skorzystać
scrollIntoView
z funkcji z poniższą opcją:Tak więc odpowiedź na ten post brzmi:
źródło
biorąc pod uwagę, że masz element div, który musisz przewijać w środku, wypróbuj ten fragment kodu
document.querySelector('div').scroll(x,y)
to działa ze mną wewnątrz elementu div ze zwojem, powinno to działać w przypadku, gdy wskazałeś kursorem myszy na ten element, a następnie próbowałeś przewijać w dół lub w górę. Jeśli działa ręcznie, powinno też działać
źródło