我有一个带有2个徽标的div,在滚动时,第一个徽标隐藏,第二个使用类显示。反向滚动时,第二个徽标应隐藏并且第一个重新出现。当我到达页面顶部时,第一个重新出现,但是第二个隐藏然后重新出现。

我一直在转转,我不明白为什么在反向滚动时“ show-logo”类重新出现。谁能解释为什么?

JS:

if ($(window).width() > 640){
  var scrollTop = $(window).scrollTop();
  var header    = $(".site-header");

  if (scrollTop > 50) {
    header.addClass("scrolling");
    setTimeout(function() {
      header.addClass("show-logo");
    }, 500);
  }
  else {
    header.removeClass("show-logo scrolling");
  };
} else {
  header.removeClass("show-logo scrolling");
}


提前致谢。

最佳答案

setTimeout不知道它不应该运行,因此它可以运行。因此,如果您不希望它执行,则需要取消它。两种不同的方式取决于您要发生的事情。

var myTimer = null;
var header = $(".site-header");
var win = $(window);
win.on("scroll", function() {
  if (myTimer) {
    window.clearTimeout(myTimer)
  }
  if ($(win.width() > 640) {
    var scrollTop = win.scrollTop();
    if (scrollTop > 50) {
      header.addClass("scrolling");
      myTimer = setTimeout(function() {
        header.addClass("show-logo");
      }, 500);
    } else {
       header.removeClass("show-logo scrolling");
    }
  } else {
    header.removeClass("show-logo scrolling");
  }
});


要么

var myTimer = null;
var header = $(".site-header");
var win = $(window);
win.on("scroll", function() {
  if ($(win.width() > 640) {
    var scrollTop = win.scrollTop();
    if (scrollTop > 50) {
      header.addClass("scrolling");
      if (!myTimer) {
        myTimer = setTimeout(function() {
          header.addClass("show-logo");
        }, 500);
      }
    } else {
       header.removeClass("show-logo scrolling");
       if (myTimer) {
         window.clearTimeout(myTimer)
         myTimer = null
       }
    }
  } else {
    header.removeClass("show-logo scrolling");
  }
});

关于javascript - 为什么jQuery removeClass重新出现在滚动条上?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58698493/

10-13 02:28