diff options
Diffstat (limited to 'assets/js/progress-bar.js')
| -rw-r--r-- | assets/js/progress-bar.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/assets/js/progress-bar.js b/assets/js/progress-bar.js new file mode 100644 index 0000000..bc8b70a --- /dev/null +++ b/assets/js/progress-bar.js @@ -0,0 +1,38 @@ +// progress-bar.js +(function() { + const progressBar = document.querySelector('.reading-progress'); + if (!progressBar) return; + + // Only enable on pages with substantial content + const mainContent = document.querySelector('main'); + if (!mainContent) return; + + function updateProgress() { + // Calculate scroll percentage + const windowHeight = window.innerHeight; + const docHeight = document.documentElement.scrollHeight - windowHeight; + const scrolled = window.scrollY; + const percent = docHeight > 0 ? (scrolled / docHeight) * 100 : 0; + + progressBar.style.width = percent + '%'; + } + + // Mark body as scrollable if there's significant content + const contentHeight = mainContent.offsetHeight; + if (contentHeight > window.innerHeight * 1.5) { + document.body.classList.add('scrollable'); + } + + // Use requestAnimationFrame for smooth updates + let ticking = false; + window.addEventListener('scroll', function() { + if (!ticking) { + requestAnimationFrame(updateProgress); + ticking = true; + setTimeout(() => { ticking = false; }, 100); + } + }, { passive: true }); + + // Initial update + updateProgress(); +})(); |
