javascript - 每次滚动超过触发点时,功能都会不断重置

标签 javascript jquery css

我有一个在滚动到某个点时触发的函数,该函数有效但每次我进一步向下滚动时不知何故不断重置,有没有什么方法可以只在它到达那个特定点时触发它并且单独那个特定点?

$(document).ready(function(){

function someFunction() {
$(".someContent .someYellowOverlay").toggleClass("someAnimation").delay(250).queue(function(next){
$(this).css("transform-origin", "right center");
next();
}).delay(125).queue(function(next){
$("p").css("display", "block");
next();
}).delay(250).queue(function(next){
$(this).removeClass("someAnimation");
next();
})
}

$(document).scroll(function(){

var scrollPos = $(document).scrollTop();
console.log(scrollPos)

if (scrollPos >= 250) {
  someFunction();
  setTimeout();
}

})
})

https://codepen.io/alexyap/pen/jmQqvQ?editors=0110

最佳答案

您可以使用一个标志,该标志在第一次滚动大于或等于 250 时设置,并在滚动小于 250 时重置它(如果用户向下滚动、向上滚动和再次向下滚动,它仍然会再次触发)。

$(document).ready(function(){

var flag = false;

function someFunction() {
  $(".someContent .someYellowOverlay").toggleClass("someAnimation").delay(250).queue(function(next    ) {
    $(this).css("transform-origin", "right center");
    next();
  }).delay(125).queue(function(next) {
    $("p").css("display", "block");
    next();
  }).delay(250).queue(function(next) {
    $(this).removeClass("someAnimation");
    next();
  });
}

$(document).scroll(function(){
  var scrollPos = $(document).scrollTop();
  console.log(scrollPos)

  if (scrollPos >= 250 && flag === false) {
    flag = true;
    someFunction();
    setTimeout();
  } else if (scrollPos < 250) {
    flag = false;
  }
});

});

如果您希望事件只发生一次,那么您可以简单地删除额外的 else if 条件,或者您可以考虑使用 jQuery 的 one确保事件只发生一次的方法。

(请注意,您可以根据自己的喜好将标志变量命名为更具描述性的名称,例如 didScroll 或 scrolledGreaterThan250)

关于javascript - 每次滚动超过触发点时,功能都会不断重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44086735/

相关文章:

javascript - 传递到组件中的 Prop 不呈现

javascript - jQuery HTML anchor 标记渐进增强

jquery - 查找文本与列表中单击的文本匹配的元素

javascript - 使用 lodash 按日期排序

javascript - Backbone.js 教程和学习资源

html - @media (最大宽度 : 837px) ! = $(文档).width()<837

javascript - 当它到达特定的 div 时如何停止滚动 div?

javascript - 如何阻止 iframe 滚动直到它完全位于页面上? (里面的图片)

javascript - 在棋盘上添加数字和字母

jquery - 在 Angular 8 中使用metismenu,第二级导航无法在移动尺寸屏幕中打开