我如何在迭代之间设置一秒延迟?
var arr = [[1,2,3],[4,5,6],[7,8,9]];
function out(ar){
var interval = setInterval(function(){
for (var i=0; i<ar.length;i++){
for (var j=0;j<ar[i].length;j++){
document.write(ar[i][j]);
}
document.write("</br>");
}
clearInterval(interval);
},1000);
}
out(arr);
http://jsbin.com/edanib/edit我如何在迭代之间设置一秒延迟?
此代码的工作,但我想每个输出数字之前做出一秒的延迟。 上面的代码不能这样做。我该怎么做vanilla Javascript?
setInterval
不能保证获得优1个第二间隔,因为其他的事情可能会遇到,但你可以用下面的
function out(ar) {
var i = 0, j = 0;
var interval = setInterval(function(){
// Start with the next row if the last one was finished.
if (i < ar.length && j == ar[i].length) {
++i;
j = 0;
// Put a line after it.
document.body.appendChild(document.createElement('br'));
}
// Check if we're out of rows.
if (i >= ar.length) { clearInterval(interval); return; }
// Write out a number.
document.body.appendChild(document.createTextNode('' + ar[i][j]));
// We're done with the cell that we just wrote.
++j;
}, 1000 /* milliseconds */);
}
亲近把数组索引的功能之外,所以每次间隔火灾,它从上次运行中获得循环状态。
此外,您不能在间隔处理程序中使用document.write
,因为在文档关闭之后调用document.write
会破坏现有文档。
谢谢!但我想输出他们像这样123 br 456 br 789可能吗? – DrStrangeLove
@DrStrangeLove,我编辑来做到这一点。 –
非常感谢! :) – DrStrangeLove
最简单的方法是用setInterval
创建一个循环。具备的功能捕捉计数器,并增加他们适当动辄
请尝试以下
function output(arr) {
var i = 0;
var j = 0;
var interval = setInterval(function() {
while (i < arr.length && j === arr[i].length) {
j = 0;
i++;
}
if (i === arr.length) {
clearInterval(interval);
} else {
document.write(arr[i][j]);
}
j++;
}, 1000);
};
小数点。如果传递一个空数组,这将导致控制台中的垃圾邮件异常。 –
@MikeSamuel好抓。已更新为处理空arr并正确处理空子数组(arr [i]') – JaredPar
尝试这样的:首先,创建一维数组,你给调用输出功能本身延迟:
var arr = [[1,2,3],[4,5,6],[7,8,9]];
function out(ar){
var singleDim = []
for (var i=0; i<ar.length;i++){
for (var j=0;j<ar[i].length;j++){
singleDim.push(ar[i][j]);
}
}
outDelayed(singleDim,0,1000);
}
function outDelayed(arr,index,delay) {
if (index < arr.length) {
document.write(arr[index]);
setTimeout(function(){
outDelay(arr,index+1,delay);
},delay);
}
}
out(arr);
请勿使用'document.write'。 – SLaks