setTimeout 只运行一次?
function slide()
{
if($('.current').is(':last-child')){
$('.current').removeClass('.current');
$('#imgholder').first().addClass('.current');
$('#imgholder').animate({left: '3920px'});
}
else{
$nxt=$(".current");
$(".current").removeClass("current");
$nxt.next().addClass("current");
$('#imgholder').animate({left: '-=980'},{duration: 'slow', easing: 'easeOutBounce' });
}
}
var loop_handle= setTimeout("slide()",'3000');
我已将此代码放在标头部分中,并且 setTimeout 仅运行一次。
function slide()
{
if($('.current').is(':last-child')){
$('.current').removeClass('.current');
$('#imgholder').first().addClass('.current');
$('#imgholder').animate({left: '3920px'});
}
else{
$nxt=$(".current");
$(".current").removeClass("current");
$nxt.next().addClass("current");
$('#imgholder').animate({left: '-=980'},{duration: 'slow', easing: 'easeOutBounce' });
}
}
var loop_handle= setTimeout("slide()",'3000');
I have put this code in header section and the setTimeout runs only once.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
setTimeout
应该只运行一次。您正在寻找setInterval
。另外,第二个参数应该是数字,而不是字符串。当函数调用不需要任何参数时,最好引用函数而不是使用字符串。字符串将被转换为函数。该函数将在窗口范围内执行。
setTimeout
should only run once. You're looking forsetInterval
.Also, the second argument should be a number, not a string. When the function call doesn't require any arguments, it's better to reference to the function instead of using a string. A string would be converted to a function. This function will be executed within the scope of the window.
是的,setTimeout 只运行一次。您需要
setInterval
。此函数还返回一个可用于取消间隔的 ID。例如:Yes, setTimeout only runs once. You want
setInterval
. This function also returns an ID you can use to cancel the interval. For example:您正在寻找 setInterval
请参阅:https://developer.mozilla.org/en/window.setInterval< /a>
You are looking for setInterval
See: https://developer.mozilla.org/en/window.setInterval
setTimeout
函数仅运行一次!如果您想运行更多次,您应该使用setInterval
:您也可以在
slide()
函数末尾使用setTimeout
来再次重新设置超时:The
setTimeout
function only runs once! If you want to run it in more times you should usesetInterval
:Also you can use
setTimeout
in the end of theslide()
function to re-set-timeout again:您只调用它一次,因此它只会执行一次。
也许您正在考虑“setInterval()”。
顺便说一下,当你调用它时,只需传递函数的名称而不是字符串:
You only call it once, so it'll only execute once.
Perhaps you're thinking of "setInterval()".
When you call it, by the way, just pass the name of the function and not a string:
将 setTimeout 与递归结合使用(无限循环)
如果要保持每个函数调用之间的精确间隔,请使用 setTimeout 而不是 setInterval。 setInterval 可能会在某个时刻重叠,这通常不是预期的行为。这样你也可以和 couter 和 stopit if xondi
或有条件地使用它;
使用我的代码笔此处尝试一下,
这将在您的控制台中输出:
或使用 OOP - 代码此处
use setTimeout with recursion (endless loop)
If you want to keep the exact space between each function call use setTimeout instead setInterval. setInterval can overlap at some point and this is often not expected behavior. This way you can also and couter and stopit if xondi
Or use it with conditions;
Try it with my Code Pen here
Which would output in your console this:
Or use OOP - Code Pen here
这是因为
setTimeout()
应该只运行一次。为了按设定的时间间隔触发事件,请使用setInterval()
。That's because
setTimeout()
is supposed to run only once. In order to fire an event on set intervals usersetInterval()
.当您在递归循环中使用 setTimeout 时,通常会发生此问题,例如在 ajax 回调中,当您想要在递归之外运行某些内容时,您希望 setTimeout 能够像过去一样工作。记住在非递归函数中使用 setInterval。
This problem usually happens when you used setTimeout in recursion loop, for example in ajax callback and when you want to run something out of recursion, you expect setTimeout to work as past. remember to use setInterval in non-recursion functions.