Scroll progress line
A single fixed progress line that gives long-form pages a clear sense of place.
<div data-sc-effect="scroll-progress" aria-hidden="true"></div>
[data-sc-effect="scroll-progress"] {
position: fixed; inset: 0 auto auto 0; z-index: 10;
width: 100%; height: 3px; transform: scaleX(0); transform-origin: left;
background: #5b5ce2; pointer-events: none;
}
const progress = document.querySelector('[data-sc-effect="scroll-progress"]');
let progressTicking = false;
window.addEventListener('scroll', () => {
if (progressTicking) return;
progressTicking = true;
requestAnimationFrame(() => {
const max = document.documentElement.scrollHeight - window.innerHeight;
progress.style.transform = `scaleX(${max > 0 ? window.scrollY / max : 0})`;
progressTicking = false;
});
}, { passive: true });