Mam łącze na długiej stronie HTML. Po kliknięciu chcę, aby div
inna część strony była widoczna w oknie, przewijając ją do widoku.
Trochę jak EnsureVisible
w innych językach.
Sprawdziłem scrollTop
i scrollTo
wyglądają jak czerwone śledzie.
Czy ktoś może pomóc?
javascript
html
ɢʀᴜɴᴛ
źródło
źródło
document.getElementById('#something').scrollIntoView({ behavior: 'smooth', block: 'center' });
Jeśli nie chcesz dodawać dodatkowego rozszerzenia, poniższy kod powinien działać z jQuery.
źródło
A co z JQuery ScrollTo - zobacz ten przykładowy kod
źródło
Bez wyszukanego przewijania, ale powinno Cię tam zabrać.
źródło
Trudność z przewijaniem polega na tym, że może być konieczne nie tylko przewijanie strony, aby wyświetlić element div, ale może być również konieczne przewijanie wewnątrz przewijalnych elementów div na dowolnej liczbie poziomów.
Właściwość scrollTop jest dostępna w każdym elemencie DOM, w tym w treści dokumentu. Ustawiając to, możesz kontrolować, jak daleko w dół coś jest przewijane. Możesz również użyć właściwości clientHeight i scrollHeight, aby zobaczyć, ile przewijania jest potrzebne (przewijanie jest możliwe, gdy parametr clientHeight (widok) jest mniejszy niż scrollHeight (wysokość zawartości).
Możesz również użyć właściwości offsetTop, aby dowiedzieć się, gdzie w kontenerze znajduje się element.
Aby zbudować od podstaw procedurę przewijania w widoku prawdziwie ogólnego przeznaczenia, musisz zacząć od węzła, który chcesz ujawnić, upewnić się, że znajduje się on w widocznej części jego rodzica, a następnie powtórzyć to samo dla rodzica itd., Wszystko droga, aż dotrzesz na szczyt.
Jeden krok mógłby wyglądać mniej więcej tak (nieprzetestowany kod, bez sprawdzania przypadków brzegowych):
źródło
Możesz użyć
Element.scrollIntoView()
metody, jak wspomniano powyżej. Jeśli zostawisz go bez parametrów w środku, otrzymasz natychmiastowe brzydkie przewijanie . Aby temu zapobiec, możesz dodać ten parametr -behavior:"smooth"
.Przykład:
Po prostu zastąp
scroll-here-plz
swoimdiv
elementem lub na stronie internetowej. A jeśli widzisz swój element na dole okna lub pozycja nie jest taka, jakiej się spodziewałeś, pobaw się parametremblock: ""
. Można użyćblock: "start"
,block: "end"
lubblock: "center"
.Pamiętaj: zawsze używaj parametrów wewnątrz obiektu {}.
Jeśli nadal masz problemy, przejdź do https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
Istnieje szczegółowa dokumentacja dotycząca tej metody.
źródło
To zadziałało dla mnie
źródło
Odpowiedź zamieszczona tutaj - to samo rozwiązanie Twojego problemu.
Edycja: odpowiedź JQuery jest bardzo przyjemna, jeśli chcesz płynnego przewijania - nie widziałem tego wcześniej w akcji.
źródło
Dlaczego nie nazwana kotwica?
źródło
Właściwość, której potrzebujesz, to location.hash. Na przykład:
location.hash = 'top'; // przeskoczy do nazwanej kotwicy "góra
Nie wiem, jak zrobić fajną animację przewijania bez użycia dojo lub jakiegoś podobnego zestawu narzędzi, ale jeśli potrzebujesz go tylko do przeskoczenia do kotwicy, location.hash powinien to zrobić.
(testowane na FF3 i Safari 3.1.2)
źródło
Nie mogę dodać komentarza do odpowiedzi futtta powyżej, ale dla płynniejszego przewijania użyj:
źródło
scrollTop (IIRC) to miejsce w dokumencie, do którego przewijana jest góra strony. scrollTo przewija stronę w taki sposób, że górna część strony znajduje się w miejscu określonym przez użytkownika.
To, czego potrzebujesz, to niektóre manipulowane style JavaScript. Powiedzmy, że jeśli chcesz, aby element DIV znajdował się poza ekranem i przewijaj go od prawej strony, ustaw lewy atrybut elementu div na szerokość strony, a następnie zmniejszaj go o określoną wartość co kilka sekund, aż znajdzie się tam, gdzie chcesz.
To powinno wskazać ci właściwy kierunek.
Dodatkowe: przepraszam, myślałem, że chciałeś, aby oddzielny element div „wyskoczył” skądś (tak jak czasami ta witryna), a nie przenosił całą stronę do sekcji. Właściwe użycie kotwic pozwoliłoby osiągnąć ten efekt.
źródło
Istnieje wtyczka jQuery dla ogólnego przypadku przewijania do elementu DOM, ale jeśli wydajność jest problemem (a kiedy nie?), Sugerowałbym zrobienie tego ręcznie. Obejmuje to dwa kroki:
quirksmode dobrze wyjaśnia mechanizm stojący za tym pierwszym. Oto moje preferowane rozwiązanie:
Używa rzutowania od zera do 0, co w niektórych kręgach nie jest odpowiednią etykietą, ale mi się podoba :) Druga część używa
window.scroll
. Więc reszta rozwiązania to:Voila!
źródło
Osobiście uznałem powyższą odpowiedź Josha opartą na jQuery za najlepszą, jaką widziałem i działała idealnie dla mojej aplikacji ... oczywiście, już używałem jQuery ... Na pewno nie włączyłbym całej biblioteki jQ tylko do tego jeden cel.
Twoje zdrowie!
EDYCJA: OK ... więc zaledwie kilka sekund po opublikowaniu tego zobaczyłem inną odpowiedź tuż pod moją (nie jestem pewien, czy nadal pode mną po edycji), która mówi, że należy użyć:
document.getElementById ('your_element_ID_here'). scrollIntoView ();
Działa to doskonale i w znacznie mniejszym kodzie niż wersja jQuery! Nie miałem pojęcia, że w JS jest wbudowana funkcja o nazwie .scrollIntoView (), ale tak jest! Więc jeśli chcesz fantazyjnej animacji, przejdź do jQuery. Szybko i brudno ... użyj tego!
źródło
Ten kod jest przydatny do płynnego przewijania
źródło
Popraw mnie, jeśli się mylę, ale ciągle czytam to pytanie i wciąż myślę, że Angus McCoteup pytał, jak ustawić element na pozycję: naprawiony.
Angus McCoteup, sprawdź http://www.cssplay.co.uk/layouts/fixed.html - jeśli chcesz, aby Twój DIV zachowywał się tam jak menu, zajrzyj do CSS
źródło