2011-08-07 58 views
2

Javascript是否打算在網站/ web應用程序上儘可能少運行?我的意思是通常的意圖是一旦頁面加載並放在一邊,通過所有的js文件運行,然後當函數立即執行並完成它時?Javascript的自制功能

我正在使用谷歌地圖的項目工作,我有一個自定義標記對象腳本出來,調試器告訴我,瀏覽器運行通過所有我的js文件之前,甚至出現在頁面上。

我的問題出現在這裏:我想動畫某些標記以jQuery(類似於Dock中的OS X圖標)連續上下跳動,而且我對無限循環函數的幾次嘗試都只是使瀏覽器崩潰。所以我明白,瀏覽器不喜歡,但有沒有辦法讓一個簡單的腳本在用戶瀏覽頁面時在後臺重複自己?或者是Javascript只是不應該這樣使用?

(我使用Flash工作了很長一段時間,所以我的心態還是存在的。)

+0

所以,換句話說,「我怎樣才能安排重複任務在Javascript中」? –

回答

3

是的,Javascript函數應該儘快完成並退出。 GUI和腳本運行在同一個單獨的線程上,所以只要你在一個Javascript函數中,瀏覽器中什麼都不顯示。如果您嘗試使用無限循環,瀏覽器將顯示爲凍結。

您可以使用window.setIntervalwindow.setTimeout方法來觸發在特定時間運行的代碼。通過運行每秒更新幾次的時間間隔,您可以創建一個動畫。

+0

謝謝教授!我會閱讀這些。 –

2

你必須設置一個計時器,在規定的時間後執行腳本。

var timer = setTimeout(code, milliseconds); 

將在幾乎毫秒內執行code。腳本的每次執行都可以設置一個新的定時器來再次執行腳本。

您可以使用clearTimeout(timer)來取消定時事件。

+0

我實際上遇到了'setTimeout'問題,我的js只會跳過'setTimeout''d行並繼續前進,並且從不會在2000毫秒內做任何事情。我認爲使用谷歌地圖會產生複雜性 –

0

個人而言,我在頁面加載後儘可能多地保存執行代碼,部分方法是將所有<script> s放在<body>的底部。這意味着(感知)頁面加載時間的減少,同時讓我所有的JS都可以在需要時運行。

我不會推薦閱讀文檔開始時需要做的所有事情。相反,將事情綁定到事件上,如點擊按鈕等。

+0

我會牢記這一點,當我從數據庫中提取數據時,情況可能會有所不同,但谷歌地圖需要大量的js來運行'onload( )'。 –

+0

感謝downvote,無論是誰。 Downvote的沉默忍者再次襲來。無論如何,也許可以將Google的腳本放在''末尾。它應該有所幫助。 – Bojangles

+0

也許他們不同意你的策略?謝謝,我會用棍子戳那 –

1

使用setTimeout()setInterval()。 MDC上的文章非常好。

您需要更新內部快速運行的函數,但需要多次調用,而不是更新循環內部。

+0

這是一個很好的方式,謝謝 –

1

既然你說你使用的是jQuery,可以考慮使用它的effects API(例如jQuery.animate()),它會讓你的生活變得更容易!

+0

是的,我喜歡'animate()',但我的問題是動畫的時間和循環,而不是如何創建動畫本身。 –