2013-07-10 107 views
2

的jsfiddle在這裏...setInterval只運行一次?

http://jsfiddle.net/Vd8PJ/10/

所有權利。我試圖創建一個JQuery輪播展示一些不同寬度的圖像。爲了幫助實現這一點,我試圖在包含圖像的無序列表上創建一個無縫,無止境的幻燈片。我計劃將已經通過閾值的圖像與.before屬性放在一起,以便它永遠持續下去。但是,我有三個問題。

的第一個問題是,如果我的JS是這樣的......

$(document).ready(function() { 
    function gallery() { 
    $("#image").animate({"margin-left":"200px"}, 3000); 
    } 
setInterval(gallery, 3000); 
}); 

它等待3秒,並且只運行一次。我環顧四周,看看我能解決的只是一次運行的問題,我發現這個...

setInterval() only running function once

等諸多問題,如它。總是這是一回事。他們呼籲這樣的功能...

setInterval(gallery(), 3000); 

,而不是像這樣的setInterval,...

setInterval(gallery, 3000); 

所以,我知道這不可能是解決辦法。考慮到我的功能已經沒有括號,並且被稱爲正確的方式。 (我認爲)。

所以,邏輯上我試圖解決下一個問題,三秒延遲。我寫這...

$(document).ready(function() { 
    $("#image").animate({"margin-left":"200px"}, 3000); 
    function gallery() { 
     $("#image").animate({"margin-left":"200px"}, 3000); 
    } 
    setInterval(gallery, 3000); 
}); 

現在立即運行在頁面加載時,然而,由於setInterval的只運行前一次,我假設我會得到兩個事件......

$("#image").animate({"margin-left":"200px"}, 3000); 

一個負載運行,另一個通過setInterval從「庫」函數運行。但是,情況並非如此。它立即運行,但我只發生一次。

我的最後一個問題與setInterval沒有任何關係,但我想我會用一塊石頭殺死兩隻鳥。因爲我的無序列表的寬度爲9,999像素,這是否意味着即使我連續運行動畫,最終我將用盡元素移動?

感謝先進!

+0

動畫是你的問題就在這裏,當達到 –

回答

2

它看起來就像是

$("#image").animate({"margin-left":"200px"}, 3000); 

當該功能首次在margin-left:200px運行已被設置爲所提供的屬性運行一次。

所以下次運行時,margn-left屬性沒有變化。因此,它看起來靜態

我認爲你正在尋找

$("#image").animate({"margin-left":"+=200"}, 3000); 

使用+ =都會增加提供每一個函數運行時間的值。

Check Fiddle

+0

沒錯改用「+ = 200」,並設置邏輯最後的圖像,這就是我失蹤了。非常感謝你。 – Allenph

+0

很高興有幫助:) –