Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用setInterval()替换循环_Javascript_Jquery_Loops - Fatal编程技术网

Javascript 使用setInterval()替换循环

Javascript 使用setInterval()替换循环,javascript,jquery,loops,Javascript,Jquery,Loops,我想在一个数组上进行连续的延迟迭代。在下面的示例中,我使用了setInterval()。它工作正常,但我很好奇有没有更好的方法来实现这一点 您可以通过两种方式来改进这一点。首先,您可以使用模运算符“包装”数组周围的增量数,而无需检测它是否超出数组的边界。其次,可以使用递归无限循环数组。最后,您可以使用setTimeout()来确保计时不会失去同步。试试这个: var print=“Lorem ipsum door sit amet”。拆分(“”); 函数iterateOverMsg(arr

我想在一个数组上进行连续的延迟迭代。在下面的示例中,我使用了setInterval()。它工作正常,但我很好奇有没有更好的方法来实现这一点




您可以通过两种方式来改进这一点。首先,您可以使用模运算符“包装”数组周围的增量数,而无需检测它是否超出数组的边界。其次,可以使用递归无限循环数组。最后,您可以使用
setTimeout()
来确保计时不会失去同步。试试这个:

var print=“Lorem ipsum door sit amet”。拆分(“”);
函数iterateOverMsg(arr,i){
$('p').hide().text(arr[i%arr.length]).fadeIn(3000).fadeOut(2000);
setTimeout(iterateOverMsg.bind(this,arr,++i),5000);
}
iterateOverMsg(打印,0)
.dynamicText{
字号:3em;
文本对齐:居中;
颜色:绿色;
}


我投票结束这个问题,因为这个问题寻求优化/改进,CodeReviews是正确的门户。而不是
I++;如果(i>=arr.length){i=0
你可以试试
i=(i+1)%arr.length
。也不确定这个
fadeIn(3000)。fadeOut(2000)
但是
fadeOut
应该在fadeIn的回调中吗?您可以使用HTML5动画和转换事件来实现这一点:请参阅“ontransitionend”和“onanimationend”setInterval是一个函数,它每一定毫秒执行一段代码,这正是您想要实现的,为什么要更改它?您可以实现intervalsetTimeout也是如此,但我不明白这样做的意义。嘿,Rory,这里的重构很棒。谢谢你的建议。
var message = "Lorem ipsum dolor sit amet";
var print = message.split(" ");


var iterateOverMsg = function(arr) {
    $('p').hide().append(arr[0]).fadeIn(3000).fadeOut(2000);
    var i = 1;
    setInterval(function() {
        $('p').hide().text(arr[i]).fadeIn(3000).fadeOut(2000);
        i++;
        if (i >= arr.length) {
            i = 0;
        }
    }, 5000);
}(print);