Przyciąganie przewijane po zmianie układu

Począwszy od Chrome 81 nie trzeba już dodawać detektorów zdarzeń do wymuszania ponownego przyciągania.

Funkcja przyciągania przewijania w CSS umożliwia programistom stron internetowych zapewnienie dobrze kontrolowanej obsługi przewijania przez deklarowanie pozycji przyciągania podczas przewijania. Wadą obecnej implementacji jest to, że przyciąganie przewijane nie działa dobrze, gdy zmienia się układ, np. gdy zmieniasz rozmiar widocznego obszaru lub gdy obrócisz urządzenie. Ten błąd został usunięty w Chrome 81.

Interoperacyjność

Wiele przeglądarek ma podstawową obsługę funkcji CSS Scroll Snap. Więcej informacji znajdziesz w artykule Czy mogę użyć funkcji CSS Scroll Snap?.

Chrome jest obecnie jedyną przeglądarką, która obsługuje przyciąganie przewijania po zmianie układu. W przeglądarce Firefox jest dostępny zgłoszenie umożliwiające wykonanie tej czynności. W przeglądarce Safari także otwiera się zgłoszenie do ponownego przyciągnięcia po zmianie treści przewijającego. Na razie możesz zasymulować to zachowanie, dodając do detektorów zdarzeń ten kod, aby wymusić wykonanie przyciągania:javascript scroller.scrollBy(0,0);Nie gwarantuje to jednak, że przewijak wraca do tego samego elementu.

Wprowadzenie

CSS – przewijanie

Funkcja CSS Scroll Snap umożliwia programistom stron internetowych zapewnienie kontroli podczas przewijania dzięki deklarowaniu pozycji przyciągania przewijania. Pozycje te zapewniają, że przewijane treści są prawidłowo dopasowane do kontenera, co pozwala uniknąć nieprecyzyjnego przewijania. Inaczej mówiąc, przyciąganie przewijania:

  • Zapobiega wyświetlaniu nietypowych pozycji przewijania podczas przewijania.
  • Efekt stronicowania treści.

Artykuły podzielone na strony i karuzele obrazów to 2 typowe przypadki użycia przewijania.

Przykład przyciągania przewijanego elementu CSS.
Przykład przyciągania przewijanego elementu CSS. Na końcu przewijania linia pozioma obrazu jest wyrównana względem osi poziomej kontenera przewijania.

Filmy Short

Podczas zmiany rozmiaru okna usuwane są pozycje przyciągania.

Przyciąganie do przewijania umożliwia użytkownikom łatwe poruszanie się po treści, ale brak możliwości dostosowania się do zmian w treści i układzie sprawia, że niektóre jej potencjalne zalety nie są dla nich przydatne. Jak pokazano w przykładzie powyżej, użytkownicy muszą dostosować pozycję przewijania przy każdej zmianie rozmiaru okna, aby znaleźć przyciągnięty wcześniej element. Oto kilka typowych scenariuszy, które powodują zmianę układu:

  • Zmiana rozmiaru okna
  • Obracanie urządzenia
  • Otwieranie Narzędzi deweloperskich

Pierwsze 2 scenariusze sprawiają, że aplikacja CSS Scroll Snap jest mniej atrakcyjna dla użytkowników, a trzeci stanowi koszmar dla programistów podczas debugowania. Deweloperzy muszą też wziąć pod uwagę te braki przy tworzeniu środowiska dynamicznego obsługującego takie działania jak dodawanie, usuwanie czy przenoszenie treści.

Częstym rozwiązaniem tego problemu jest dodanie detektorów, które wykonują automatyczne przewijanie za pomocą JavaScriptu, aby wymuszać wykonywanie przyciągania w przypadku każdej z tych zmian układu. To obejście może być nieskuteczne, gdy użytkownik oczekuje, że przewijany powrót do tej samej treści co wcześniej. Dalsza obsługa JavaScriptu wydaje się być sprzeczna z celem tej funkcji CSS.

Wbudowana obsługa ponownego przyciągania po zmianie układu w Chrome 81.

Wspomniane w niej błędy nie występują już w Chrome 81: przewijane elementy pozostaną ukryte nawet po zmianie układu. Po zmianie układu ponownie ocenią pozycje przewijania i w razie potrzeby powrócą do najbliższego punktu przyciągania. Jeśli przewijak został wcześniej przyciągnięty do elementu, który nadal istnieje po zmianie układu, będzie się on próbował cofnąć. Zwróć uwagę na to, co się stanie, gdy zmieni się układ w tym przykładzie.

Utracono pozycję przyciągania
Obrót urządzenia nie zachowuje położenia przyciągania w Chrome 80. Po przewinięciu do slajdu NOPE i zmianie orientacji urządzenia z pionowej na poziomą pojawia się pusty ekran, który oznacza, że utracono pozycję przyciągania podczas przewijania.
Położenie przyciągania jest zachowywane
Obrót urządzenia zachowuje pozycje przyciągania z Chrome 81. Slajd NOPE pozostaje widoczny, mimo że orientacja urządzenia wielokrotnie się zmienia.

Więcej informacji znajdziesz w sekcji Ponowne przyciąganie po zmianie układu.

Przykład: przyklejone paski przewijania

Dzięki funkcji „Przyciągnij po zmianie układu” programiści mogą zaimplementować przyklejone paski przewijania z kilkoma wierszami kodu CSS:

.container {
  scroll-snap-type: y proximity;
}

.container::after {
  scroll-snap-align: end;
  display: block;
}

Chcesz dowiedzieć się więcej? Zapoznaj się z tym interfejsem demonstracyjnym czatu.

Dodanie nowej wiadomości powoduje ponowne przypięcie, dzięki czemu wiadomości w Chrome 81 pozostają na samym dole.

Praca w przyszłości

Wszystkie efekty ponownego przyciągania przewijania są obecnie dostępne natychmiast. Możliwe dodatkowe działanie polegające na ponownym przyciągnięciu za pomocą efektów płynnego przewijania. Aby dowiedzieć się więcej, zapoznaj się z problemem ze specyfikacją.

Prześlij opinię

Twoja opinia jest dla nas bezcenna, ponieważ pomoże nam ulepszyć ponowne przyciąganie użytkowników po wprowadzeniu zmian w układzie. Wypróbuj ją i pozwól inżynierom Chromium, co o niej myślisz.