Module: Asciidoctor::Html::Scroll

Defined in:
lib/asciidoctor/html/scroll.rb

Overview

Due to mobile dynamic viewport heights, we need custom code for reliable anchor scrolling.

Constant Summary collapse

SCROLL =
<<~JS
  (function() {
    const page = document.getElementById('page');
    let scrolledOnce = false;
    function scrollToElement(e) {
      e && e.preventDefault();
      scrolledOnce = true;
      const href = location.hash;
      const id = href.substring(1);
      const target = document.getElementById(id);
      if(!target) return;

      const rect = target.getBoundingClientRect()
      page.scrollTo({
        top: rect.top + page.scrollTop,
        left: 0,
        behavior: 'smooth'
      });
    }
    addEventListener('hashchange', scrollToElement);
    addEventListener('load', function() {
      !scrolledOnce && scrollToElement();
    });
  })();
JS