Skip to content

Commit c3591b1

Browse files
groksrcclaude
andcommitted
Preserve sidebar scroll position across page navigations
- Add ID to sidebar nav element for JavaScript targeting - Save sidebar scroll position to sessionStorage on link click - Restore sidebar scroll position on page load - Prevents selected menu items from scrolling out of view on navigation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 0570735 commit c3591b1

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/components/Sidebar.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const currentPath = Astro.url.pathname
66
---
77

88
<aside class="hidden md:block w-72 flex-shrink-0 bg-background">
9-
<nav class="sticky top-16 h-[calc(100vh-4rem)] overflow-y-auto py-6 pr-6 pl-8">
9+
<nav id="sidebar-nav" class="sticky top-16 h-[calc(100vh-4rem)] overflow-y-auto py-6 pr-6 pl-8">
1010
<div class="space-y-6">
1111
<!-- Top links section -->
1212
<div class="space-y-2">

src/layouts/Layout.astro

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,23 @@ const { title = 'Basic Memory', description = 'Basic Memory - Persistent memory
2626
<slot />
2727

2828
<script>
29+
// Preserve sidebar scroll position
30+
document.addEventListener('click', (e) => {
31+
const sidebar = document.getElementById('sidebar-nav');
32+
if (sidebar && e.target.closest('a')) {
33+
sessionStorage.setItem('sidebarScrollPos', sidebar.scrollTop);
34+
}
35+
});
36+
37+
// Restore scroll position after navigation
38+
document.addEventListener('DOMContentLoaded', () => {
39+
const sidebar = document.getElementById('sidebar-nav');
40+
const scrollPos = sessionStorage.getItem('sidebarScrollPos');
41+
if (sidebar && scrollPos) {
42+
sidebar.scrollTop = parseInt(scrollPos);
43+
}
44+
});
45+
2946
// Handle accordion interactions
3047
document.addEventListener('DOMContentLoaded', () => {
3148
document.addEventListener('click', (e) => {

0 commit comments

Comments
 (0)