1
1
<script lang="ts">
2
- export const fullHeight = 130
3
2
export const shrinkedHeight = 70
4
3
</script >
5
4
@@ -10,34 +9,46 @@ import LessonListModal from '~/components/Page/Navbar/LessonListModal.vue'
10
9
import LessonListDropdown from ' ~/components/Page/Navbar/LessonListDropdown.vue'
11
10
12
11
const heightDelta = ref <number >(0 )
13
- const currentTopOffset = ref < number >( 0 )
12
+
14
13
const navbar = ref <ComponentPublicInstance | null >(null )
15
14
16
15
onMounted (async () => {
17
16
await nextTick ()
18
17
18
+ handleResize ()
19
+ })
20
+
21
+ onBeforeMount (() => {
22
+ window .addEventListener (' resize' , handleResize )
23
+ window .addEventListener (' scroll' , handleScroll )
24
+ })
25
+ onBeforeUnmount (() => {
26
+ window .removeEventListener (' resize' , handleResize )
27
+ window .removeEventListener (' scroll' , handleScroll )
28
+ })
29
+
30
+ const handleResize = () => {
31
+ const windowsWidth = window .innerWidth
32
+ const fullHeight = windowsWidth < 768 ? 70 : 130
33
+
19
34
navbar .value ! .$el .setAttribute (' style' , ` --height: ${fullHeight }px; --shrinked-height: ${shrinkedHeight }px ` )
20
- navbar .value ! .$el .setAttribute (' data-height' , fullHeight .toString ())
21
- navbar .value ! .$el .setAttribute (' data-shrinked-height' , shrinkedHeight .toString ())
22
- const spacer = document .createElement (' div' )
23
- spacer .classList .add (' bg-primary' )
24
- spacer .setAttribute (' id' , ' page-navbar-spacer' )
35
+ let spacer = document .getElementById (' page-navbar-spacer' )
36
+ if (! spacer ) {
37
+ spacer = document .createElement (' div' )
38
+ spacer .classList .add (' bg-primary' )
39
+ spacer .setAttribute (' id' , ' page-navbar-spacer' )
40
+ navbar .value ! .$el .parentNode .insertBefore (spacer , navbar .value ! .$el )
41
+ }
25
42
spacer .style .height = ` ${fullHeight }px `
26
43
27
- navbar .value ! .$el .parentNode .insertBefore (spacer , navbar .value ! .$el )
28
-
29
44
document .documentElement .scrollTop = Math .max (document .documentElement .scrollTop - fullHeight , 0 )
30
45
31
46
heightDelta .value = fullHeight - shrinkedHeight
32
- })
33
-
34
- onBeforeMount (() => window .addEventListener (' scroll' , handleScroll ))
35
- onBeforeUnmount (() => window .removeEventListener (' scroll' , handleScroll ))
36
-
37
- watch (currentTopOffset , value => navbar .value ?.$el .classList .toggle (' shrinked' , value > heightDelta .value ))
47
+ }
38
48
39
49
const handleScroll = () => {
40
- currentTopOffset .value = document .documentElement .scrollTop
50
+ const scrollTop = document .documentElement .scrollTop
51
+ navbar .value ?.$el .classList .toggle (' shrinked' , scrollTop > heightDelta .value )
41
52
}
42
53
</script >
43
54
@@ -47,9 +58,9 @@ const handleScroll = () => {
47
58
id =" page-navbar"
48
59
ref =" navbar"
49
60
brightness =" primary"
50
- class = " navbar- dark"
61
+ theme = " dark"
51
62
>
52
- <ski-navbar-collapse id =" page-navbar-collapse" class = " collapse-container " >
63
+ <ski-navbar-collapse id =" page-navbar-collapse" >
53
64
<ski-navbar-items class =" ms-auto ms-lg-0" >
54
65
<ski-navbar-item class =" page-navbar-item" to =" /" :active =" $route.path === '/'" >
55
66
<ski-icon icon =" house-door-fill" /> Accueil
@@ -97,8 +108,8 @@ $shrinked-shadow: 0 0 20px rgba(black, 0.2);
97
108
position : relative ;
98
109
99
110
& .collapsing , & .show {
100
- margin-left : -40 px ;
101
- margin-right : -40 px ;
111
+ margin-left : -20 px ;
112
+ margin-right : -20 px ;
102
113
// box-shadow: $shrinked-shadow;
103
114
}
104
115
@@ -126,9 +137,10 @@ $shrinked-shadow: 0 0 20px rgba(black, 0.2);
126
137
}
127
138
128
139
@include media-breakpoint-down (lg) {
140
+ background-color : darken ($primary , 5% );
141
+
129
142
.page-navbar-item {
130
143
padding : 10px 20px ;
131
- background-color : darken ($primary , 5% );
132
144
133
145
:deep (a ) {
134
146
padding : 10px ;
0 commit comments