2014-03-12 25 views
0

這是代碼,它運行完美一次,但setInterval不會重複第二次,或者讓我們說其他連續時間,因爲它是假設的,這是我想要的,例如,當它到達數組的最後位置回到第一個等等,有人可以幫助我,我非常感激。setInterval不重複我的代碼,但它運行一次,我想知道爲什麼?

CSS:

#ok{position:absolute} 

HTML:

<div id="ok">ok</div> 

腳本:

var a=[b(),c(),d()]; 

function b(){ 
for (var i=0;i<700000;i++){document.getElementById("ok").style.left=(i)+"px";} 
alert(i); 
}; 
function c(){ 
for (var i=0;i<20;i++){document.getElementById("ok").style.left=(i)+"px";}; 
alert(i); 
} 
function d(){ 
for (var i=0;i<5;i++){document.getElementById("ok").style.left=(i)+"px";alert(i)}; 
}; 
for(var i=0;i<a.length;i++){ 
setInterval(function(){a[i];if(i==a.length-1){i=0;};},1000); 
} 

演示: jsfiddle

+0

你怎麼知道它沒有運行更多比一次?在間隔中記錄日誌。 (另外,閉環問題)。 –

+1

我向你保證,setInterval IS是連續運行的。你錯誤地解釋了結果。你實際上做的是立即在頂部執行一個()b()和c(),然後再不執行它們。不幸的是,我不認爲你的代碼會做你想做的事情,因爲循環通常在瀏覽器呈現更新之前開始和結束,所以我沒有理由修復它。 –

回答

1

有幾個問題與您的代碼。首先,你立即執行b()c()和d(),而不是每個間隔。此外,b()c()和d()不會導致任何類型的動畫,因此for循環完全沒有意義。然後,在包裝間隔結束時,您的for循環不是必需的。

http://jsfiddle.net/EBhKp/1/

var a = [b, c, d]; 

function b() { 
    document.getElementById("ok").style.left = 700000 + "px"; 
    console.log(700000); 
} 

function c() { 
    document.getElementById("ok").style.left = 20 + "px"; 
    console.log(20); 
} 

function d() { 
    document.getElementById("ok").style.left = 5 + "px"; 
    console.log(5); 
} 
var i = 0; 
setInterval(function() { 
    a[i](); 
    i++; 
    if (i == a.length) { 
     i = 0; 
    } 
}, 1000); 

一個基本的CSS轉換將添加動畫:

http://jsfiddle.net/EBhKp/2/

這裏,它被簡化:

var a = [700000, 20, 5]; 

function setLeftStyle(position) { 
    document.getElementById("ok").style.left = position + "px"; 
    console.log(position); 
} 
var i = 0; 
setInterval(function() { 
    setLeftStyle(a[i]); 
    i++; 
    if (i == a.length) { 
     i = 0; 
    } 
}, 1000); 
1

必須指定參數當你使用一個函數而不是使用局部變量i時。

此外,使用函數指針這樣的:

var a = [ b, c, d ]; 
相關問題