From b70d72928367b1c9bb3fe8aee3bd123b7e7f4cbe Mon Sep 17 00:00:00 2001 From: XUE <46087743+xue68@users.noreply.github.com> Date: Sun, 3 Nov 2024 21:47:31 +0800 Subject: [PATCH] fix: restore the sidebar position to make the selected entry showed --- assets/js/sidebar.js | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/assets/js/sidebar.js b/assets/js/sidebar.js index 65f7b15..7bb2e0f 100644 --- a/assets/js/sidebar.js +++ b/assets/js/sidebar.js @@ -1,5 +1,5 @@ document.addEventListener("DOMContentLoaded", function () { - scrollToActiveItem(); + restoreSidebarPosition(); enableCollapsibles(); }); @@ -16,21 +16,28 @@ function enableCollapsibles() { }); } -function scrollToActiveItem() { +function saveSidebarPosition() { const sidebarScrollbar = document.querySelector("aside.sidebar-container > .hextra-scrollbar"); - const activeItems = document.querySelectorAll(".sidebar-active-item"); - const visibleActiveItem = Array.from(activeItems).find(function (activeItem) { - return activeItem.getBoundingClientRect().height > 0; - }); - - if (!visibleActiveItem) { - return; + if (sidebarScrollbar) { + const scrollPosition = sidebarScrollbar.scrollTop; + sessionStorage.setItem('sidebarScrollPosition', scrollPosition); } - - const yOffset = visibleActiveItem.clientHeight; - const yDistance = visibleActiveItem.getBoundingClientRect().top - sidebarScrollbar.getBoundingClientRect().top; - sidebarScrollbar.scrollTo({ - behavior: "instant", - top: yDistance - yOffset - }); } + +function restoreSidebarPosition() { + const sidebarScrollbar = document.querySelector("aside.sidebar-container > .hextra-scrollbar"); + if (sidebarScrollbar) { + const savedPosition = sessionStorage.getItem('sidebarScrollPosition'); + + if (savedPosition !== null) { + sidebarScrollbar.scrollTo({ + top: parseInt(savedPosition), + behavior: 'instant' + }); + } + + sidebarScrollbar.addEventListener('scroll', function() { + saveSidebarPosition(); + }); + } +} \ No newline at end of file