(function () { "use strict"; const smoothScrollLinks = document.getElementsByClassName("smooth-scroll"); const easeInOutQuad = function (t) { return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t; }; const scrollToEl = ( startTime, currentTime, duration, scrollEndElemTop, startScrollOffset ) => { const runtime = currentTime - startTime; let progress = runtime / duration; progress = Math.min(progress, 1); const ease = easeInOutQuad(progress); window.scroll(0, startScrollOffset + scrollEndElemTop * ease); if (runtime < duration) { window.requestAnimationFrame((timestamp) => { const currentTime = timestamp || new Date().getTime(); scrollToEl( startTime, currentTime, duration, scrollEndElemTop, startScrollOffset ); }); } }; if (smoothScrollLinks.length > 0) { for (let i = 0; i < smoothScrollLinks.length; i++) { const smoothScrollLink = smoothScrollLinks[i]; smoothScrollLink.addEventListener("click", function (e) { e.preventDefault(); const link = e.target.closest(".smooth-scroll"); const targetId = link.href.split("#")[1]; const target = document.getElementById(targetId); const duration = link.getAttribute("data-duration") || 1000; if (!target) return; window.requestAnimationFrame((timestamp) => { const stamp = timestamp || new Date().getTime(); const start = stamp; const startScrollOffset = window.pageYOffset; const scrollEndElemTop = target.getBoundingClientRect().top; scrollToEl( start, stamp, duration, scrollEndElemTop, startScrollOffset ); }); }); } } })();