Działa scrollIntoView()
we wszystkich przeglądarkach? Jeśli nie, to czy jest jQuery
alternatywa?
Odpowiedzi:
Jak zauważył @ 9bits, od dawna jest to obsługiwane przez wszystkie główne przeglądarki . Nie martw się o to. Głównym problemem jest sposób, w jaki to działa. Po prostu przeskakuje do konkretnego elementu, który równie dobrze może znajdować się na końcu strony. Skacząc do niego, użytkownicy nie mają pojęcia, czy:
Pierwsze dwa można określić na podstawie pozycji przewijania, ale kto powiedział, że użytkownicy śledzili pozycję przewijania przed wykonaniem skoku? Jest to więc działanie niedeterministyczne.
To ostatnie może być prawdziwe zwłaszcza jeśli strona ma ruchomy nagłówek, który jest przewijany z widoku, a pozostały projekt strony nie oznacza niczego na tej samej stronie (jeśli również nie ma elementu pionowego o całkowitej wysokości, takiego jak lewe menu bar). Zdziwiłbyś się, ile stron ma ten problem. po prostu sprawdź je sam. Wejdź na jakąś stronę, spójrz na nią u góry, a następnie naciśnij Endklawisz i spójrz na nią ponownie. Prawdopodobnie pomyślisz, że to inna strona.
scrollintoview
wtyczka jQuery na ratunekDlatego nadal istnieją wtyczki, które wykonują przewijanie do widoku zamiast używania natywnej funkcji DOM. Zwykle animują przewijanie, co eliminuje wszystkie 3 problemy opisane powyżej. Użytkownicy mogą łatwo śledzić ruch.
ScrollIntoViewOptions
pozwala określić behavior: 'smooth'
. niestety nie ma sposobu, aby łatwo sprawdzić, czy ta opcja jest obsługiwana w przeglądarce…
behavior: "smooth"
, ale nie Chrome lub Safari.
Wygląda na to, że tak: http://www.quirksmode.org/dom/w3c_cssom.html
Używam iScroll-4 Matteo Spinnelli i działa również w iOS Safari. Ma trzy metody scrollTo, scrollToElement i scrollToPage. Załóżmy, że masz nieuporządkowaną listę elementów umieszczonych wewnątrz elementu div. Jak napisał Robert Koritnik powyżej, musisz mieć tę niewielką animację, aby pokazać, że przewinąłeś. Ten efekt osiąga poniższa metoda.
scrollToElement(element, time);
Nie próbowałem tego, ale wydaje się, że piggybacking na wbudowanej funkcji scrollIntoView pozwoliłoby zaoszczędzić dużo kodu. Oto, co zrobiłbym, gdybyś chciał animowaną akcję: