本文详解如何使用 javascript 的 `classlist.toggle()` 方法,优雅实现按钮点击切换 css 类的效果,解决导航栏展开/收起、音频播放/暂停等常见交互需求,并提供可复用代码与最佳实践。
在前端开发中,“点击添加样式、再点击恢复原状”是一种高频交互模式(如汉堡菜单展开/收起、播放/暂停按钮、主题切换等)。你当前的代码存在几个关键问题:
$('.navbar')),且 if (e) { ... } else { ... } 判断无意义(e 总是存在); ✅ 推荐方案:统一使用 element.classList.toggle(className)
该方法会自动检测元素是否已包含指定类 —— 存在则移除,不存在则添加,无需手动判断状态,语义清晰、安全可靠。
// 1. 导航栏菜单切换(汉堡按钮)
const menuBtn = document.getElementById('menuBtn');
const menuList = document.getElementById('mainMenu');
const navbar = document.querySelector('.navbar');
menuBtn.addEventListener('click', () => {
// 切换菜单列表的显示状态(Tailwind 动态类需确保已启用)
menuList.classList.toggle('top-[80px]');
menuList.classList.toggle('opacity-100');
// 切换导航栏尺寸样式
navbar.classList.toggle('sticky-costum-2');
});
// 2. 音频播放/暂停(复用同一逻辑)
const audio = document.getElementById('player');
const audioBtn = document.getElementById('audioBtn'); // 假设按钮 ID 为 audioBtn
audioBtn.addEventListener('click', () => {
if (audio.paused) {
audio.play().catch(e => console.warn("Audio play failed:", e));
audioBtn.innerHTML = '@@##@@';
} else {
audio.pause();
audioBtn.innerHTML = '@@##@@';
}
});? 进阶技巧:用 toggleAttribute() 管理状态标识 若需额外记录状态(如用于 ARIA),可配合 toggleAttribute('aria-expanded', true),提升可访问性。
通过 toggle(),你不再需要维护布尔状态变量或冗长的 if-else 分支——一行代码,双向控制。这是现代 Web 交互开发的基石能力,掌握它,让每一次点击都更可靠、更简洁。