diff options
| author | 2023-04-19 17:30:39 +0800 | |
|---|---|---|
| committer | 2023-04-19 17:30:39 +0800 | |
| commit | 3adc965dd09490b7efa1cce9f09b0a3b30970277 (patch) | |
| tree | f813abb07d7b003984aa74e3154752b6ffc3ccd5 /docs/plugins/menu.ts | |
| parent | c7c9ca6f0c8eddf6d34cd40779f3b2d9463f3a46 (diff) | |
| download | HydroRoll-3adc965dd09490b7efa1cce9f09b0a3b30970277.tar.gz HydroRoll-3adc965dd09490b7efa1cce9f09b0a3b30970277.zip | |
✨优化文档
Diffstat (limited to 'docs/plugins/menu.ts')
| -rw-r--r-- | docs/plugins/menu.ts | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/docs/plugins/menu.ts b/docs/plugins/menu.ts new file mode 100644 index 0000000..82512c3 --- /dev/null +++ b/docs/plugins/menu.ts @@ -0,0 +1,48 @@ +export default defineNuxtPlugin((ctx: any) => { + // Menu visible reference + const visible = ref(false) + + // Open the menu + const open = () => (visible.value = true) + + // Close the menu + const close = () => (visible.value = false) + + // Toggle the menu (useful for one-off buttons) + const toggle = () => (visible.value = !visible.value) + + // Watch route change, close on change + ctx.$router.afterEach(() => setTimeout(close, 50)) + + // Watch visible and remove overflow so the scrollbar disappears when menu is opened + if (process.client) { + watch( + visible, + (isVisible) => { + const html = document.documentElement + + if (isVisible) { + html.style.overflow = 'hidden' + } else { + setTimeout(() => { + html.style.overflow = '' + }, 100) /* had to put it, because of layout shift on leave transition */ + } + }, + { + immediate: true + } + ) + } + + return { + provide: { + menu: { + visible, + close, + open, + toggle + } + } + } +}) |
