@@ -98,58 +98,62 @@ const links: TMenu = {
98
98
};
99
99
100
100
function toggleHeader() {
101
- const $header = document .querySelector (" .menu-wrapper" );
102
- let currentTransition = 0 ;
103
- let lastScrollPosition = 0 ;
104
- if ($header ) {
101
+ const headerElement = document .querySelector (" .menu-wrapper" ) as HTMLElement ;
102
+
103
+ // headerOffset tracks how much the header has been moved vertically
104
+ let headerOffset = 0 ;
105
+
106
+ // This keeps track of the previous scroll position to calculate whether the user is scrolling up or down.
107
+ let previousScrollPosition = 0 ;
108
+
109
+ if (headerElement ) {
105
110
const handleScroll = () => {
106
- const headerHeight = $header .clientHeight ;
111
+ const headerHeight = headerElement .clientHeight ;
112
+
113
+ // the current vertical scroll position of the page
107
114
const currentScrollPosition =
108
115
window .scrollY || document .documentElement .scrollTop ;
109
- const distance = currentScrollPosition - lastScrollPosition ;
110
116
111
- const nextTransition = Math .min (
112
- Math .max (currentTransition + distance , 0 ),
117
+ // the distance that the user has scrolled since the last scroll event
118
+ const distance = currentScrollPosition - previousScrollPosition ;
119
+
120
+ // New vertical position of the header
121
+ const nextHeaderOffset = Math .min (
122
+ Math .max (headerOffset + distance , 0 ),
113
123
headerHeight
114
124
);
115
125
126
+ // checks if the user has scrolled past the header and nextHeaderOffset differs from the current position
116
127
if (
117
128
currentScrollPosition >= headerHeight &&
118
- nextTransition !== currentTransition
129
+ nextHeaderOffset !== headerOffset
119
130
) {
120
- currentTransition = nextTransition ;
121
- $header .style .transform = ` translateY(-${currentTransition }px) ` ;
131
+ headerOffset = nextHeaderOffset ;
132
+ headerElement .style .transform = ` translateY(-${headerOffset }px) ` ;
122
133
}
123
134
135
+ // if the user has scrolled past the header, we add these classes
124
136
if (currentScrollPosition > headerHeight ) {
125
- $header .classList .add (
137
+ headerElement .classList .add (
126
138
" intersect" ,
127
139
" shadow-sm" ,
128
140
" dark:bg-verse-900/50" ,
129
141
" bg-verse-50/50"
130
142
);
131
143
} else {
132
- $header .classList .remove (
144
+ headerElement .classList .remove (
133
145
" intersect" ,
134
146
" shadow-sm" ,
135
147
" dark:bg-verse-900/50" ,
136
148
" bg-verse-50/50"
137
149
);
138
150
}
139
151
140
- lastScrollPosition = currentScrollPosition ;
152
+ previousScrollPosition = currentScrollPosition ;
141
153
};
142
154
143
- const observer = new IntersectionObserver (
144
- ([entry ]) => {
145
- if (entry .isIntersecting ) {
146
- window .addEventListener (" scroll" , handleScroll , { passive: true });
147
- }
148
- },
149
- { threshold: 0 }
150
- );
151
-
152
- observer .observe ($header );
155
+ console .log (" test" );
156
+ window .addEventListener (" scroll" , handleScroll );
153
157
}
154
158
}
155
159
0 commit comments