【发布时间】:2021-11-16 20:51:01
【问题描述】:
我的网站上有一个完整的页面导航。为了确保在打开导航时页面不能滚动,body 获取了隐藏溢出的“no-scroll”类。当导航打开时,这也会删除滚动条。
当再次按下导航按钮并关闭导航时,“no-scroll”类从正文中删除,立即显示滚动条。导航栏需要 1.05 秒才能完全关闭。我试图实现的是不要立即删除“无滚动”类,而是延迟删除。有没有办法做到这一点?
这是我目前必须在按钮单击时添加和删除类的代码:
<script>
// when DOM is ready
document.addEventListener('DOMContentLoaded', () => {
// on .nav-menu-button click
document.querySelectorAll('.nav-menu-button').forEach(trigger => {
trigger.addEventListener('click', function(){
this.x = ((this.x || 0) + 1)%2;
if(this.x){ // 1st click
document.querySelectorAll('body').forEach(target => target.classList.add('no-scroll'));
}
else{ // 2nd click (toggle)
document.querySelectorAll('body').forEach(target => target.classList.remove('no-scroll'));
}
});
});
});
</script>
提前致谢!
【问题讨论】:
-
你可以在变量中使用
setInterval,完成后使用clearInterval。 -
你的
.no-scroll类中的过渡是 CSS 延迟吗?如果是,您可以将其移至.nav-menu-button,以便在切换.no-scroll时随时触发。您也可以使用document.querySelectorAll('.nav-menu-button').forEach(trigger => { trigger.addEventListener('click', function(){ $this.classList.toggle('no-scroll');}}); });代替您的if{} else{}。
标签: javascript html css animation interaction