web-dev-qa-db-ja.com

setTimeoutは1回だけ実行されますか?

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は1回だけ実行されます。

28
pahnin

この問題は通常、たとえばajaxコールバックなどの再帰ループでsetTimeoutを使用し、再帰から何かを実行したい場合に、setTimeoutが過去と同じように機能すると予想されます。非再帰関数では必ずsetIntervalを使用してください。

0
Cyber

再帰を伴うsetTimeoutを使用(無限ループ)

各関数呼び出しの間に正確なスペースを維持したい場合は、setIntervalの代わりにsetTimeoutを使用します。 setIntervalはある時点で重複する可能性があり、これは多くの場合予期されない動作です。

(function test(){
  setTimeout(function(){
    console.log(1);
    testt();
  }, 2000)
})()
0
DevWL