2012-01-05 95 views
0

所以我創建了一個腳本,它增加了浮動在我的網站頁面上的雲。但是,如this example所示,第一個雲的外觀被setTimeoutspawn_cloud_loop中延遲(10-12秒)。有沒有什麼辦法可以在沒有延遲的情況下立即增加第一個雲。我曾嘗試在spawn_cloud_loop();之前加入add_cloud();,但延遲仍然存在。整個項目可在https://github.com/JordanAdams/jordanadams.github.comjs/clouds.js的雲效應代碼中找到。停止setTimeout延遲首次運行


喬丹

+1

在[你的例子](http://jordanadams.github.com/)中看不到任何雲 - 這是隻有IE瀏覽器還是錯誤的鏈接?無論如何,在這裏**相關代碼**我們不能指望外部來源。 – 2012-01-05 12:23:25

+0

@ShadowWizard,你將不得不等待至少10秒,因此OP要更快。 – medopal 2012-01-05 12:30:33

+0

@ShadowWizard - 你是否真的讀過帖子。雲的外觀被延遲了(這是整個問題)。這個延遲範圍在10到12秒之間。 – 2012-01-05 12:31:45

回答

4

clouds.js腳本包含在頭上,然後add_cloud();立即運行。這意味着你創建一個新的雲,並試圖將它附加到「雲」div,因爲它尚未被解析,所以它不存在。因爲spawn_cloud_loop()函數具有如此長的延遲,所以第二個和隨後的雲被創建爲OK,因此該文檔已被當時解析。

您需要將clouds.js腳本包含在頁面源代碼中「clouds」div下方的某個位置,或將add_cloud();調用放入文檔就緒處理程序中,以便在「雲」 DIV已經被解析:

$(document).ready(function(){ 
    add_cloud(); 
    spawn_cloud_loop(); 
    clean_up(); 
}); 

注意:你不會需要add_cloud()初始呼叫,如果你修改了spawn_cloud_loop()設置超時之前調用add_cloud()

function spawn_cloud_loop() { 
    add_cloud(); 
    setTimeout(spawn_cloud_loop, rand(10000, 12000)); 
} 

(當然,你仍舊需要調用spawn_cloud_loop()從準備的文件。)

另外,如果你立即在動畫的最後從jQuery .animate() method's完全刪除每個雲你不會需要一個過程clean_up()在所有回調:

cloud.animate({ left: window.screen.width+100 }, 
       50000, 
       'linear', 
       function(){ $(this).remove(); }); 
+0

這工作完美,你完美地解釋它。謝謝:) – 2012-01-05 13:01:21

+0

可以做一些更多的改進,這裏是[現場測試案例](http://jsfiddle.net/YQEKx/) - @Jordan FYI以及.. – 2012-01-05 13:03:05