← Tutti gli articoli

Tutorial

Auto-pager — scroll infinito su qualsiasi pagina

Un forum, un archivio di blog, risultati di ricerca — contenuto diviso su 40 pagine con un link «Avanti» in fondo. Clic, attesa, clic, attesa. L'auto-pager lo fa per te: quando arrivi in fondo, la regola recupera la pagina successiva e accoda il suo contenuto. Scroll infinito su una pagina che non ce l'ha.

L'idea

Ogni pagina paginata ha due cose: un link «avanti» (spesso <a rel="next">) e un contenitore con il contenuto vero. L'auto-pager:

  1. Rileva che hai scrollato vicino al fondo.
  2. Recupera l'HTML della pagina successiva tramite fetch.
  3. Estrae il contenitore del contenuto e accoda i suoi figli a quello corrente.
  4. Sostituisce il link «avanti» con quello della nuova pagina — e ripete.

La regola

Il JavaScript della regola — adatta i due selettori in alto al sito specifico:

const NEXT = 'a[rel="next"]';
const LIST = '#content';
let loading = false;
addEventListener('scroll', async () => {
  if (loading || !document.querySelector(NEXT)) return;
  if (innerHeight + scrollY < document.body.offsetHeight - 1200) return;
  loading = true;
  const next = document.querySelector(NEXT);
  const html = await fetch(next.href).then(r => r.text());
  const doc = new DOMParser().parseFromString(html, 'text/html');
  const more = doc.querySelector(LIST);
  if (more) document.querySelector(LIST).append(...more.childNodes);
  const nn = doc.querySelector(NEXT);
  nn ? (next.href = nn.href) : next.remove();
  loading = false;
});

Due selettori da regolare

Come funziona

Rilevare il fondo

innerHeight + scrollY è la posizione del bordo inferiore della finestra nel documento. Quando si avvicina a document.body.offsetHeight (con un margine di 1200 px), è ora di tirarne giù altro.

Il blocco loading

L'evento scroll si attiva decine di volte al secondo. Il flag loading garantisce che un fetch alla volta venga eseguito — senza, accoderesti la stessa pagina venti volte.

DOMParser

fetch restituisce HTML grezzo come testo. DOMParser lo trasforma in un documento interrogabile, da cui querySelector estrae solo il contenitore del contenuto — senza header, footer e menu della nuova pagina.

Trappole

Vedi anche

Installa JustZix — e scrolla invece di cliccare «Avanti».

Valuta questo articolo

Nessuna valutazione — sii il primo.

Provalo tu stesso

Installa JustZix e incolla qualsiasi snippet di questo articolo. Due minuti da zero a una regola funzionante su tutti i tuoi dispositivi.

Ottieni JustZix

Funzionalità · Come funziona · Esempi · Casi d'uso