From 7593ef4ae4f59dc6ae7ad8dbff3be653bfe5e968 Mon Sep 17 00:00:00 2001 From: XUE <46087743+xue68@users.noreply.github.com> Date: Mon, 4 Nov 2024 10:29:22 +0800 Subject: [PATCH] fix: add the debouncing and reduce the duplicate writes --- assets/js/sidebar.js | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/assets/js/sidebar.js b/assets/js/sidebar.js index 7bb2e0f..58f032b 100644 --- a/assets/js/sidebar.js +++ b/assets/js/sidebar.js @@ -3,6 +3,18 @@ document.addEventListener("DOMContentLoaded", function () { enableCollapsibles(); }); +function debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; +} + function enableCollapsibles() { const buttons = document.querySelectorAll(".hextra-sidebar-collapsible-button"); buttons.forEach(function (button) { @@ -16,10 +28,9 @@ function enableCollapsibles() { }); } -function saveSidebarPosition() { - const sidebarScrollbar = document.querySelector("aside.sidebar-container > .hextra-scrollbar"); - if (sidebarScrollbar) { - const scrollPosition = sidebarScrollbar.scrollTop; +function saveSidebarPosition(scrollPosition) { + const currentPosition = sessionStorage.getItem('sidebarScrollPosition'); + if (currentPosition === null || parseInt(currentPosition) !== scrollPosition) { sessionStorage.setItem('sidebarScrollPosition', scrollPosition); } } @@ -36,8 +47,12 @@ function restoreSidebarPosition() { }); } + const debouncedSave = debounce((position) => { + saveSidebarPosition(position); + }, 150); + sidebarScrollbar.addEventListener('scroll', function() { - saveSidebarPosition(); + debouncedSave(this.scrollTop); }); } } \ No newline at end of file