fix: restore the sidebar position to make the selected entry showed

This commit is contained in:
XUE 2024-11-03 21:47:31 +08:00
parent f65aca556d
commit b70d729283

View File

@ -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();
});
}
}