diff --git a/web/js/feed.js b/web/js/feed.js index cf64dfd..42c8985 100644 --- a/web/js/feed.js +++ b/web/js/feed.js @@ -127,6 +127,16 @@ function createFeed(feedEl, sentinelEl, urlFor) { page++; } loading = false; + + // Der IntersectionObserver feuert nur bei Zustandswechseln. Füllt die + // gerade geladene Seite den Viewport nicht über den Sentinel hinaus, gäbe + // es keinen Wechsel und nie ein Nachladen -> hier aktiv weiterladen, bis + // der Sentinel aus dem Sichtbereich wandert oder das Ende erreicht ist. + if (!done && sentinelVisible()) loadMore(); + } + + function sentinelVisible() { + return sentinelEl.getBoundingClientRect().top <= window.innerHeight; } function reset() { @@ -136,9 +146,14 @@ function createFeed(feedEl, sentinelEl, urlFor) { loadMore(); } - const observer = new IntersectionObserver((items) => { - if (items.some((i) => i.isIntersecting)) loadMore(); - }); + // rootMargin lädt schon kurz vor Erreichen des Sentinels nach (flüssiger und + // robust gegen den Fall eines 0-hohen Sentinels exakt am Dokumentende). + const observer = new IntersectionObserver( + (items) => { + if (items.some((i) => i.isIntersecting)) loadMore(); + }, + { rootMargin: "300px" } + ); observer.observe(sentinelEl); loadMore();