diff --git a/zenno/src/routes/doc/Article.svelte b/zenno/src/routes/doc/Article.svelte index 102ff01..011b982 100644 --- a/zenno/src/routes/doc/Article.svelte +++ b/zenno/src/routes/doc/Article.svelte @@ -10,6 +10,26 @@ let { head, children }: Props = $props(); + let tocViewed = $state(false); + let tocElem: HTMLElement | undefined = $state(); + const observeTOC: IntersectionObserverCallback = (entries, obs) => { + for (const e of entries) { + if (!e.isIntersecting) { + continue; + } + tocViewed = true; + obs.disconnect(); + } + } + + $effect(() => { + if (tocElem == null) { + return; + } + const obs = new IntersectionObserver(observeTOC, {rootMargin: "20% 0px"}); + obs.observe(tocElem); + }); + function tocClass(s: Section) { switch (s.h) { case 1: @@ -32,10 +52,12 @@ {@render head()} {#if sections.length > 0} Table of Contents -