18910140161

JavaScript-如何在按下按钮后延迟删除类?-堆栈溢出

顺晟科技

2022-10-18 13:52:57

33

我的网站上有一个完整的页面导航。为了确保页面在导航打开时不能滚动,主体获得了隐藏溢出的“无滚动”类。这也会在打开导航时删除滚动条。

当再次按下导航按钮并关闭导航时,类“无滚动”将从主体中删除,并立即显示滚动条。导航栏需要1.05秒才能完全关闭。我试图实现的目标是不立即删除“无滚动”类,而是延迟删除。有没有办法做到这一点?

这是我目前必须在按钮单击时添加和删除类的代码:

<代码><;脚本>;//当DOM准备好时document.addEventListener(' DOMContentLoaded ',()=>;{//在.nav-menu-button上单击document.querySelectorAll('.nav-menu-button ').Foreach(trigger=>;{trigger.addEventListener(' click ',function(){this.X=((this.X||0)+1)%2;if(this.X){//第一次单击document.querySelectorAll(' body ').Foreach(target=>;target.ClassList.add(' no-scroll '));}否则{//第二次单击(切换)document.querySelectorAll(' body ').Foreach(target=>;target.ClassList.remove(' no-scroll '));}});});});<;/脚本>;

谢谢了!


顺晟科技:

在这种情况下,

您可以使用WebAPI中的setTimeout函数。它注册近似(最小)超时(以毫秒为单位,您的情况是1050),在此之后将执行指定的函数。最后,代码将如下所示:

<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>

您应该尝试使用setTimeout(function(){ document.querySelectorAll('body').forEach(target => target.classList.remove('no-scroll')); },5000); <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) setTimeout(function(){ document.querySelectorAll('body').forEach(target => target.classList.remove('no-scroll')); },900); } }); }); }); </script> ,而不是.add()安·弗朗西斯

的密码解开了它!

<代码><;脚本>;//当DOM准备好时document.addEventListener(' DOMContentLoaded ',()=>;{//在.nav-menu-button上单击document.querySelectorAll('.nav-menu-button ').Foreach(trigger=>;{trigger.addEventListener(' click ',function(){this.X=((this.X||0)+1)%2;if(this.X){//第一次单击document.querySelectorAll(' body ').Foreach(target=>;target.ClassList.add(' no-scroll '));}否则{//第二次单击(切换)setTimeout(函数(){document.querySelectorAll(' body ').Foreach(target=>;target.ClassList.remove(' no-scroll '));},900);}});});});<;/脚本>;

您可以使用setTimeout函数。这里我用了5秒钟的延迟:

setTimeout(() => {
  document.querySelectorAll('body').forEach(
    (target) => target.classList.remove('no-scroll')
  );
}, 1050);
  • TAG:
相关文章
随机推荐
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航