From 808975fc86bcaf1aeb315b4232f4b7ca22705de8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=C3=A4schle?= Date: Mon, 8 Jun 2020 13:12:07 +0200 Subject: [PATCH] vdoc: fix toc scrolling --- cmd/tools/vdoc-resources/doc.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/cmd/tools/vdoc-resources/doc.js b/cmd/tools/vdoc-resources/doc.js index 70d89b0b47..4ac62e61eb 100644 --- a/cmd/tools/vdoc-resources/doc.js +++ b/cmd/tools/vdoc-resources/doc.js @@ -6,7 +6,7 @@ active.scrollIntoView({ block: 'center', inline: 'nearest' }); } } - // setupScrollSpy(); + setupScrollSpy(); setupMobileToggle(); setupDarkMode(); setupSearch(); @@ -19,7 +19,8 @@ function setupScrollSpy() { sections.forEach(function(section) { sectionPositions.push(section.offsetTop); }); - window.addEventListener('scroll', function() { + var scrollPos = 0; + window.addEventListener('scroll', function(e) { // Reset classes document.querySelectorAll('.doc-toc a[class="active"]').forEach(function(link) { link.classList.remove('active'); @@ -34,15 +35,18 @@ function setupScrollSpy() { if (link) { link.classList.add('active'); var docToc = document.querySelector('.doc-toc'); - if (link.scrollIntoViewIfNeeded) { - link.scrollIntoViewIfNeeded(); - } else if (link.scrollIntoView) { - link.scrollIntoView(); + var tocHeight = docToc.clientHeight; + var scrollTop = docToc.scrollTop; + if ((document.body.getBoundingClientRect()).top < scrollPos && scrollTop < link.offsetTop - 10) { + docToc.scrollTop = link.clientHeight + link.offsetTop - tocHeight + 10; + } else if (scrollTop > link.offsetTop - 10) { + docToc.scrollTop = link.offsetTop - 10; } } break; } } + scrollPos = (document.body.getBoundingClientRect()).top; }); }