如果条件更改,请不要执行 setTimeout
Don't execute setTimeout if condition changes
我有以下代码,当您向下滚动时,它会更改div的类。问题是,如果您滚动得非常快(或者如果我在菜单中放置指向div 的链接),超时函数不仅执行最后一个条件,而且将它们作为一个序列执行。我想做的是,如果条件在函数在超时内发生变化,则跳过函数并检查下一个条件。
$(document).scroll(function() {
var about = jQuery('#hh1').position().top;
var portfolio = jQuery('#hh2').position().top;
var services = jQuery('#hh3').position().top;
var workingprocess = jQuery('#hh4').position().top;
var clients = jQuery('#hh5').position().top;
var blog = jQuery('#hh6').position().top;
var contact = jQuery('#hh7').position().top;
var scroll = $(this).scrollTop();
if (scroll >= hh1-90 && scroll < hh3-90 || scroll >= hh5-90 && scroll < hh6-90)
{setTimeout('$(".div").addClass("MyClass")',3440);}
else
{
setTimeout('$(".div").removeClass("MyClass")',3440);
}
});
setTimeout(...)
方法需要一个函数在发生超时时执行。您没有向它发送函数。
setTimeout('$(".div").addClass("MyClass")',3440);
将其更改为
setTimeout(function(){$(".div").addClass("MyClass")},3440);
然后-
您必须存储 setTimeout(...)
方法返回的数字超时 id,并使用它来清除超时clearTimeout(...)
。
保存超时 ID 如下
timeoutID = setTimeout(function(){$(".div").addClass("MyClass")},3440);
然后使用它来清除计时器。
clearTimeout(timeoutID);
您无需检查是否已发生超时,因为如果发生超时,则指定的函数将被调用,如果没有,则需要清除它。因此,只需在条件更改时清除超时即可。
试试这个:
var addClass = function() {
$(".div").addClass("MyClass");
}
var removeClass = function() {
$(".div").removeClass("MyClass");
}
if (scroll >= hh1-90 && scroll < hh3-90 || scroll >= hh5-90 && scroll < hh6-90)
{
setTimeout( myClass,3440);
}
else
{
setTimeout(removeClass,3440);
}
相关文章:
- setTimeout函数能否在其前面的代码执行之前激发
- 在setTimeout完成后执行
- 为什么 setTimeout(., 0) 不立即执行
- 函数未在 setTimeout 中执行
- JavaScript setTimeout() 不会等待执行
- 当超出范围时,延迟执行脚本Jquery(或SetTimeOut)BUT
- eval和setTimeout之间的差异执行字符串代码
- toString似乎导致setTimeout不总是为toString的变量参数执行函数
- 在setTimeout中执行jQuery成员函数而不关闭的方法
- 只有setTimeout执行函数.JS
- setTimeout在IE中执行得很快
- setTimeout()/setInterval()赢得't执行**我正在传递函数对象,而不是执行函数
- nodejs:setImmediate 回调在 setTimeout(fn, 0) 之后执行,与 nodejs 文档描述
- setTimeout 是使用 javascript 执行异步函数的好解决方案吗?
- 我尝试在 1 秒后调用 .hide()(使用 setTimeout),但它是直接执行的,为什么
- 为什么不执行嵌套 setTimeout 中的 removeAttribute 调用
- 如果条件更改,请不要执行 setTimeout
- 在进入下一个循环迭代之前执行setTImeout操作
- 过早执行setTimeout
- 不断执行setTimeout后的setInterval