This commit is contained in:
2026-06-30 15:02:20 +08:00
commit 3948b5a48a
306 changed files with 77275 additions and 0 deletions
@@ -0,0 +1,54 @@
import { ref, onMounted, onBeforeUnmount } from 'vue'
const NAV_AUTO_COLLAPSE_WIDTH = 960
/**
* 左侧导航折叠/展开逻辑
*/
export function useNavigation() {
const navCollapsed = ref(false)
const storyboardMenuExpanded = ref(false)
let _navAutoCollapsed = false
function _syncNavCollapse() {
const narrow = window.innerWidth < NAV_AUTO_COLLAPSE_WIDTH
if (narrow && !_navAutoCollapsed && !navCollapsed.value) {
_navAutoCollapsed = true
navCollapsed.value = true
} else if (!narrow && _navAutoCollapsed) {
_navAutoCollapsed = false
navCollapsed.value = false
}
}
function toggleNav() {
navCollapsed.value = !navCollapsed.value
_navAutoCollapsed = false
}
function scrollToTop() {
window.scrollTo({ top: 0, behavior: 'smooth' })
}
function scrollToAnchor(id) {
const el = document.getElementById(id)
if (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' })
}
onMounted(() => {
_syncNavCollapse()
window.addEventListener('resize', _syncNavCollapse)
})
onBeforeUnmount(() => {
window.removeEventListener('resize', _syncNavCollapse)
})
return {
navCollapsed,
storyboardMenuExpanded,
toggleNav,
scrollToTop,
scrollToAnchor,
}
}