Skip to content

Commit 33040e1

Browse files
committed
使用astro包装js
1 parent b53e929 commit 33040e1

File tree

1 file changed

+23
-27
lines changed

1 file changed

+23
-27
lines changed

src/components/HeadMenu.astro

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)