fixing quicknav jumps in settings

This commit is contained in:
2026-07-12 19:21:30 +02:00
parent b96f22be8a
commit f7a6104896

View File

@@ -47,11 +47,25 @@
el.classList.add('anchor-target');
}
function scrollToHash(hash, smooth) {
var target = document.querySelector(hash);
if (!target) return;
// Defer one frame so --navbar-h / layout is fully settled
// (important in PJAX context where syncNavbarHeight runs after injection)
requestAnimationFrame(function() {
var absTop = 0, el = target;
while (el) { absTop += el.offsetTop; el = el.offsetParent; }
var navBottom = nav.getBoundingClientRect().bottom;
window.scrollTo({ top: absTop - navBottom - 8, behavior: smooth ? 'smooth' : 'auto' });
});
}
function initFromHash() {
var hash = location.hash;
if (hash && nav.querySelector('a[href="' + hash + '"]')) {
setActive(hash);
highlightTarget(hash);
scrollToHash(hash, false);
} else {
var first = nav.querySelector('a[href^="#"]');
if (first) setActive(first.getAttribute('href'));
@@ -62,12 +76,14 @@
initFromHash();
setTimeout(initFromHash, 50);
// Click: set active + highlight target immediately
// Click: prevent native jump, scroll to target just below the quicknav
nav.addEventListener('click', function(e) {
var link = e.target.closest('a[href^="#"]');
if (!link) return;
e.preventDefault();
var href = link.getAttribute('href');
setActive(href);
scrollToHash(href, true);
requestAnimationFrame(function() { highlightTarget(href); });
});
})();