initClub · 1ère Communauté Webflow Francophone

Updated last month

Implementing Auto-Scroll Table of Contents in Webflow

At a glance

Hello !

Je dois mettre en place un TOC en auto-scroll pour l'ensemble des articles d'un site.

La TOC est dans une sidebar, qui doit être entièrement visible à l'écran. Parfois, les articles sont longs, avec beaucoup de H2, d'où le besoin de paramétrer cet élément en auto-scroll. Lorsque l'utilisateur lit l'article, si un H2 devient "invisible", la TOC doit scroller automatiquement pour mettre à jour les H2 suivants.

J'y travaille, mais je manque clairement de compétences sur le sujet, donc je n'arrive pas à mes fins.

L'un de vous a déjà mis ça en place sur Webflow ? (ma TOC est créé via Finsweet Attributes)

Page avec un article "long" : https://preprod-mapension-be.webflow.io/assurance-vie/assurance-solde-restant-du

mon custom code du moment : (la première partie du script est en lien avec une section qui n'est pas visible pour l'instant)

<script>
  document.addEventListener('DOMContentLoaded', function() {
    const collectionListWrapper = document.querySelector('.collection_list-wrappertab'); 
    const tableauHeading = document.querySelector('.tableau_heading_absolute'); 

    function checkPosition() {
      const rect = collectionListWrapper.getBoundingClientRect(); 
      if (rect.top <= 9 * 16) { // 6rem (1rem = 16px)
        tableauHeading.style.visibility = 'hidden'; 
      } else {
        tableauHeading.style.visibility = 'visible'; 
      }
    }

 window.addEventListener('scroll', checkPosition);
    checkPosition(); 
    }
    setTimeout(() => {
    function titleHandler(entries, observer) {
      for (entry of entries) {
        if (entry.isIntersecting) {
          let idName = entry.target.parentNode.id
          console.log(idName)
          let link = document.querySelectorAll(`.fs-toc_link-content a[href='#${idName}']`)[0]
          link.scrollIntoView({ behavior: "instant" })
        }
      }
    }

    let titles = document.querySelectorAll(".fs-toc_richtext.w-richtext h2")

    let titleObserver = new IntersectionObserver(titleHandler)
    titles.forEach((title) => {
      titleObserver.observe(title)
    })
    }, 1000);
  });
  
</script>

V
C
12 comments

ça veut dire quoi invisible ?
Pas sûr de comprendre ce que tu veux faire

Il ne faut pas tenir compte du début du script. C'est un autre sujet

Ce que je souhaite c'est lettre en place un auto scroll dans la TOC de l'article

Franchement grosse galère ; C’est quoi l’intérêt ?

Le client veut que la sidenar soit toujours visible peut importe la taille de l'article
Donc voilà

Explique lui que techniquement c’est très compliqué et que ça va nécessité 1 jour de taf supplémentaire minimum. ça devrait le calmer

Il veut cette featire puisque son concurrent la

De toute façon il l'a veut lol

Un enfer. Je vendrai cette feature super cher pour les prochains 😂

Add a reply
Sign up and join the conversation on Slack