Javascript setTimeout只运行一次?

Javascript setTimeout只运行一次?,javascript,settimeout,Javascript,Settimeout,我将此代码放在标题部分,setTimeout只运行一次。是,setTimeout只运行一次。您需要setInterval。此函数还返回可用于取消间隔的ID。例如: function slide() { if($('.current').is(':last-child')){ $('.current').removeClass('.current'); $('#imgholder').first().addClass('.current');

我将此代码放在标题部分,setTimeout只运行一次。

是,setTimeout只运行一次。您需要
setInterval
。此函数还返回可用于取消间隔的ID。例如:

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
只应运行一次。您正在查找
setInterval

const slideInterval = setInterval(slide, 3000);

// later...
clearInterval(slideInterval);
另外,第二个参数应该是数字,而不是字符串。当函数调用不需要任何参数时,最好引用函数而不是使用字符串。字符串将被转换为函数。此函数将在窗口的范围内执行

var loop_handle = setInterval(slide, 3000);

这是因为
setTimeout()
应该只运行一次。为了在set interval user
setInterval()

也许您正在考虑“setInterval()”

顺便说一句,调用它时,只需传递函数名,而不是字符串:

  setInterval("slide()", 3000);
//becomes
  setInterval(Function("slide();"), 3000);

您正在寻找setInterval


请参阅:

设置超时功能只运行一次!如果要运行更多次,应使用
setInterval

setInterval(slide, 3000);
您还可以在
幻灯片()的末尾使用
setTimeout
功能重新设置超时:

var loop_handle= setInterval("slide()",'3000');
将setTimeout与递归一起使用(无限循环) 如果要在每次函数调用之间保持精确的间隔,请使用setTimeout,而不是setIntervalsetInterval可以在某个点重叠,这通常不是预期的行为

var loop_handle;
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' });
    }
    loop_handle = setTimeout("slide()",'3000');
}
loop_handle = setTimeout("slide()",'3000');

当您在递归循环中使用setTimeout时,通常会出现此问题,例如在ajax回调中,当您希望从递归中运行某些内容时,您希望setTimeout像过去一样工作。请记住在非递归函数中使用setInterval。

每个答案都是正确的,我想用setInterval批准哪个答案???酷。但您可以这样做以获得更好的性能:var选择器=$(“#imgholder”);多瓦特
(function test(){
  setTimeout(function(){
    console.log(1);
    testt();
  }, 2000)
})()