1
1
<script lang="ts" setup>
2
2
import { useWindowScroll } from ' @vueuse/core'
3
3
import { onContentUpdated } from ' vitepress'
4
- import { computed , shallowRef } from ' vue'
4
+ import { computed , shallowRef , ref , onMounted } from ' vue'
5
5
import { useData } from ' ../composables/data'
6
6
import { useSidebar } from ' ../composables/sidebar'
7
7
import { getHeaders , type MenuItem } from ' ../composables/outline'
@@ -21,6 +21,15 @@ const { hasSidebar } = useSidebar()
21
21
const { y } = useWindowScroll ()
22
22
23
23
const headers = shallowRef <MenuItem []>([])
24
+ const navHeight = ref (0 )
25
+
26
+ onMounted (() => {
27
+ navHeight .value = parseInt (
28
+ getComputedStyle (document .documentElement ).getPropertyValue (
29
+ ' --vp-nav-height'
30
+ )
31
+ )
32
+ })
24
33
25
34
onContentUpdated (() => {
26
35
headers .value = getHeaders (frontmatter .value .outline ?? theme .value .outline )
@@ -34,14 +43,14 @@ const classes = computed(() => {
34
43
return {
35
44
VPLocalNav: true ,
36
45
fixed: empty .value ,
37
- ' reached-top' : y .value >= 64
46
+ ' reached-top' : y .value >= navHeight . value
38
47
}
39
48
})
40
49
</script >
41
50
42
51
<template >
43
52
<div
44
- v-if =" frontmatter.layout !== 'home' && (!empty || y >= 64 )"
53
+ v-if =" frontmatter.layout !== 'home' && (!empty || y >= navHeight )"
45
54
:class =" classes"
46
55
>
47
56
<button
@@ -57,7 +66,7 @@ const classes = computed(() => {
57
66
</span >
58
67
</button >
59
68
60
- <VPLocalNavOutlineDropdown :headers =" headers" />
69
+ <VPLocalNavOutlineDropdown :headers =" headers" :navHeight = " navHeight " />
61
70
</div >
62
71
</template >
63
72
0 commit comments