summaryrefslogtreecommitdiffstats
path: root/assets/js/progress-bar.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/js/progress-bar.js')
-rw-r--r--assets/js/progress-bar.js38
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();
+})();