2012-05-01 26 views
0

我有一組頁面充當幻燈片,不同的元素被定時顯示爲錄製的配音來讀取文本。setTimeout使用jquery load()時重疊

我在使用load()刷新下一個「幻燈片」區域時遇到了麻煩。我使用setTimeout來控制顯示。我的問題是,第二頁正在使用第一頁中找到的setTimeout定時。我需要清除TimeTimeout嗎?

第1名的腳本:

var actions = [ 
    { time : 4, action : function() { $('#slidePhoto').animate({width: $('#slidePhoto img').width()/1.5}, 2000).addClass('side-photo') } }, 
    { time : 8, action : function() { $('#slideEl2').fadeIn('slow') } }, 
    { time : 17, action : function() { $('#slideEl3').fadeIn('slow') } }, 
    { time : 24, action : function() { $('#slide-container').hide('slide', { direction: "left"}, 1000, function() { 
     $('#slide-container').load('introduction2.php', function() { 
     $('#slide-container').fadeIn('slow'); 
     }); 
    }) } } 
]; 
$(document).ready(function() { 
    for(var i in actions) { 
    setTimeout(actions[i].action, actions[i].time * 1000); 
    } 
}); 

第2頁的腳本:

var actions = [ 
    { time : 10, action : function() { $('#slidePhoto').animate({width: $('#slidePhoto img').width()/1.5}, 2000).addClass('side-photo') } }, 
    { time : 16, action : function() { $('#slideEl2').fadeIn('slow') } }, 
    { time : 29, action : function() { $('#slideEl3').fadeIn('slow') } }, 
    { time : 40, action : function() { $('#slide-container').hide('slide', { direction: "left"}, 1000, function() { 
     $('#slide-container').load('introduction3.php', function() { 
     $('#slide-container').fadeIn('slow'); 
     }); 
    }) } } 
]; 
$(document).ready(function() { 
    for(var i in actions) { 
    setTimeout(actions[i].action, actions[i].time * 1000); 
    } 
}); 

這些頁面的主容器頁面上的區域內加載。我相信我可以通過在每一頁上使用不同的ID來解決這個問題,但我猜測這有些簡單。

+1

看來你確實應該使用clearTimeout(使用由setTimeout函數返回的計時器ID)。每次操作存儲一個定時器ID並不難,所以我認爲這對你來說是最簡單的。 –

+0

@dystroy - 謝謝。我一直無法使clearTimeout工作。你能舉個例子嗎? – Voodoo

+0

我添加了一個答案來詳細說明clearTimeout的用法。 –

回答

1

您需要註冊用作clearTimeout函數參數的計時器ID。

例如創建超時時:

for(var i=0; i<actions.length; i++) { 
    actions[i].timeout = setTimeout(actions[i].action, actions[i].time * 1000); 
} 

然後清除它們:

for(var i=0; i<actions.length; i++) { 
    clearTimeout(actions[i].timeout); 
} 

(我換成你「的變種我在」由動作長度標準的迭代,這是陣列的最佳做法)

+0

這很好,謝謝。 – Voodoo