@@ -77,41 +77,40 @@ const pathList = [
7777 </div >
7878</div >
7979
80- <script is:inline >
80+ <script >
8181 // 将所有汉堡菜单相关的功能封装成函数
82- function initHamburgerMenu() {
83- // 获取DOM元素
84- const hamburger = document.getElementById("hamburger");
85- const sidebar = document.getElementById("sidebar");
86- const overlay = document.getElementById("overlay");
82+ const initHamburgerMenu = () => {
83+ const hamburger = document.getElementById("hamburger")!;
84+ const sidebar = document.getElementById("sidebar")!;
85+ const overlay = document.getElementById("overlay")!;
8786 const body = document.body;
8887
89- // 如果元素不存在,直接返回
90- if (!hamburger || !sidebar || !overlay) {
91- return;
92- }
93-
9488 // 移除已存在的事件监听器(防止重复绑定)
9589 hamburger.replaceWith(hamburger.cloneNode(true));
9690 const newHamburger = document.getElementById("hamburger");
9791
9892 overlay.replaceWith(overlay.cloneNode(true));
9993 const newOverlay = document.getElementById("overlay");
10094
95+ if (!sidebar || !newHamburger || !newOverlay) {
96+ console.error("hamburger menu init error");
97+ return;
98+ }
99+
101100 // 打开菜单
102- function toggleMenu() {
101+ const toggleMenu = () => {
103102 newHamburger.classList.toggle("active");
104103 sidebar.classList.toggle("active");
105104 newOverlay.classList.toggle("active");
106105 body.classList.toggle("no-scroll", sidebar.classList.contains("active"));
107- }
106+ };
108107 // 关闭菜单
109- function closeMenu() {
108+ const closeMenu = () => {
110109 newHamburger.classList.remove("active");
111110 sidebar.classList.remove("active");
112111 newOverlay.classList.remove("active");
113112 body.classList.remove("no-scroll");
114- }
113+ };
115114
116115 // 重新绑定事件监听器
117116 newHamburger.addEventListener("click", toggleMenu);
@@ -121,10 +120,10 @@ const pathList = [
121120 const menuItems = document.querySelectorAll(".menu-item");
122121 menuItems.forEach((item) => {
123122 // 先移除可能存在的旧监听器
124- const newItem = item.cloneNode(true);
125- item.parentNode.replaceChild(newItem, item);
123+ const newItem = item.cloneNode(true) as HTMLAnchorElement ;
124+ item.parentNode? .replaceChild(newItem, item);
126125
127- newItem.addEventListener("click", (e ) => {
126+ newItem.addEventListener("click", () => {
128127 // 添加点击动画效果
129128 newItem.style.transform = "scale(0.95)";
130129 setTimeout(() => {
@@ -139,26 +138,26 @@ const pathList = [
139138 });
140139
141140 // 键盘事件支持
142- function handleKeydown(e) {
141+ const handleKeydown = (e: KeyboardEvent) => {
143142 if (e.key === "Escape" && sidebar.classList.contains("active")) {
144143 closeMenu();
145144 }
146- }
145+ };
147146
148147 // 窗口大小改变时的处理
149- function handleResize() {
148+ const handleResize = () => {
150149 if (window.innerWidth > 768 && sidebar.classList.contains("active")) {
151150 closeMenu();
152151 }
153- }
152+ };
154153
155154 // 移除旧的事件监听器并添加新的
156155 document.removeEventListener("keydown", handleKeydown);
157156 window.removeEventListener("resize", handleResize);
158157
159158 document.addEventListener("keydown", handleKeydown);
160159 window.addEventListener("resize", handleResize);
161- }
160+ };
162161
163162 // 更新选中状态的函数
164163 const updateSelected = () => {
@@ -189,10 +188,7 @@ const pathList = [
189188 });
190189
191190 // 如果页面已经加载完成,立即执行
192- if (document.readyState === "loading") {
193- // 文档仍在加载
194- } else {
195- // 文档已经加载完成
191+ if (document.readyState === "complete") {
196192 initHamburgerMenu();
197193 updateSelected();
198194 }
0 commit comments