AI-News/frontend/app/router.options.ts

34 lines
1.1 KiB
TypeScript
Raw Normal View History

2025-12-04 10:04:21 +08:00
// app/router.options.ts
// 统一的滚动位置记忆:返回上一页时尽量还原用户滚动,而不是总是回到顶部
import type { RouterConfig } from '@nuxt/schema'
const KEY = (path: string) => `scroll:${path}`
export default <RouterConfig>{
scrollBehavior(to, from, savedPosition) {
// 工具:读取为某个路径记录的滚动位置
const getStoredPosition = (path?: string) => {
if (!process.client || !path) return null
try {
const raw = sessionStorage.getItem(KEY(path))
if (!raw) return null
const pos = JSON.parse(raw)
if (typeof pos?.left === 'number' && typeof pos?.top === 'number') {
return { left: pos.left, top: pos.top }
}
} catch (err) {
console.warn('[scroll] restore failed', err)
}
return null
}
// 优先使用我们持久化的滚动位置;没有再退回浏览器的 savedPosition
const stored = getStoredPosition(to?.fullPath)
if (stored) return stored
if (savedPosition) return savedPosition
return { left: 0, top: 0 }
}
}