Blog
>
Paginacja bez przeładowania

Paginacja w Webflow bez przeładowania strony

Tworząc blog w Webflow, zazwyczaj buduję odnośnik do niego w postaci kilku najnowszych wpisów, który umieszczony jest w różnych miejscach witryny. Przykładowo na dole strony głównej. Kiedy wpisów jest wiele, warto dodać tam paginację, żeby móc przejrzeć więcej niż wyświetlone domyślnie wpisy. I tu pojawia się problem. Kliknięcie w przycisk paginacji powoduje przeładowanie, a użytkownik wyrzucony zostaje na samą górę strony. Jest to niedopuszczalny UX-owy problem.

Z punktu widzenia UX-owego, niedopuszczalnym błędem jest wyrzucanie użytkownika z jego flow i po kliknięciu przycisku "Poprzednie wpisy" załadować mu stronę od nowa i wyświetlić jej górę z sekcją Hero. A tak niestety działa natywnie wbudowana paginacja w Webflow.

Rozwiązanie problemu

Sposobem na to, jaki stosowałem kilkukrotnie, było po prostu pozbycie się paginacji. Było to rozwiązanie o tyle skuteczne, co tchórzliwe i dalece nieoptymalne. Chcemy przecież dać użytkownikowi możliwość przejrzenia większej listy wpisów, niż tylko 3 ostatnie.

Wiedziałem, że właściwym rozwiązaniem będzie stworzenie takiej funkcjonalności, która zapamięta pozycję scrolla w momencie kliknięcia w przycisk paginacji, a następnie, po przeładowaniu strony, niezauważalnie przewinie ją do poprzedniego miejsca. Wykorzystałem do tego JavaScript i sessionStorage. Po odświeżeniu strony, przywracam użytkownika dokładnie do tego samego miejsca – co do piksela. Nie ma widocznego scrollowania, migania, ani utraty kontekstu.

Oto kod, który umieściłem w sekcji <body> na stronach, gdzie występuje ta właśnie sekcja z trzema ostatnimi wpisami:

<style>
  /* Ukrycie całej strony na chwilę, żeby uniknąć migania */
  html.page-hidden {
    visibility: hidden !important;
  }
</style>

<script>
document.addEventListener("DOMContentLoaded", function () {

  // Wyłącz natywną pamięć scrolla przeglądarki
  if ('scrollRestoration' in history) {
    history.scrollRestoration = 'manual';
  }

  // Znajdź wszystkie przyciski paginacji w CMS Collection List
  const paginationButtons = document.querySelectorAll('.pagination-button');

  // 1️⃣ Zapisz dokładną pozycję scrolla przy kliknięciu w paginację
  paginationButtons.forEach(button => {
    button.addEventListener('click', () => {
      sessionStorage.setItem('scrollPos', window.scrollY);
    });
  });

  // 2️⃣ Przywróć scroll po przeładowaniu strony
  const savedScroll = sessionStorage.getItem('scrollPos');
  if (savedScroll !== null) {

    // Ukryj dokument, zanim Webflow wyrenderuje treść
    document.documentElement.classList.add('page-hidden');

    requestAnimationFrame(() => {
      // Ustaw scroll dokładnie tam, gdzie był użytkownik
      window.scrollTo(0, parseInt(savedScroll));

      // Odsłoń stronę w kolejnej klatce, by uniknąć migania
      requestAnimationFrame(() => {
        document.documentElement.classList.remove('page-hidden');
        sessionStorage.removeItem('scrollPos');
      });
    });
  }
});
</script>

Jak to działa?

window.scrollY zapisuje dokładną pozycję okna w momencie kliknięcia.

requestAnimationFrame sprawia, że przewinięcie następuje w optymalnym momencie renderowania.

Ukrycie strony (visibility: hidden) sprawia, że użytkownik nie widzi żadnego migania.

history.scrollRestoration = 'manual' zabezpiecza przed natywnym „przywracaniem” scrolla w przeglądarkach.

Efekt jest taki, że nawet jeśli paginacja w Collection List przeładowuje stronę, sekcja blogowa pojawia się dokładnie tam, gdzie była. Każdy kolejny wpis można przeglądać płynnie, bez utraty kontekstu, bez frustracji.

Widok ekranu z blogiem Webflow przed kliknięciem paginacji
Paginacja widoczna w jej domyślnym położeniu
Widok ekranu z blogiem Webflow po kliknięciu paginacji
Pozycja na stronie pozostaje niezmieniona, a użytkownik nie widzi przeładowania

Na pewno są lepsze rozwiązania, do których będę dążył w przyszłości, ale na dziś mi wystarczy, że użytkownik nie skacze na górę strony. Proste, eleganckie i skuteczne.

Potrzebujesz pomocy z Webflow?Portfolio stron internetowych
Mateusz Mrozek, projektant stron internetowych, pracujący przy biurku w nocy. Włączony monitor i lampka oświetlają twarz. Zdjęcie symbolizuje proces tworzenia strony internetowej krok po kroku.
Budowa Stron WWW
15 min. czytania
Jak powstaje strona internetowa? Proces projektowania krok po kroku
Budowa Stron WWW
10 min. czytania
Webflow czy WordPress? Wybór platformy dla firmowej strony internetowej