2013-08-06 137 views
0

我一直在瀏覽很多類似的問題,而沒有得到我所需要的東西。用JavaScript添加「延遲」功能

我有一些代碼,每次發生window.onresize事件時執行。但是代碼很困難,通常在短時間內有很多.onresize事件,並且坦白地說,需要執行的代碼只能運行一次。

所以我想要的是一些代碼等待一段時間,而resize事件繼續,然後觸發一次(直到觸發新的調整大小事件)。

我已經嘗試了setInterval和setTimeout,但我發現這些方法只是等待我指定的時間量,然後運行代碼的次數與窗口調整大小的次數完全一樣(每隔幾個像素一次窗口被調整大小)。一遍又一遍地重複相同的代碼會將瀏覽器鎖定3-4秒,所以我想在調整大小的時候鎖定瀏覽器並執行代碼會更好。

正在執行的代碼確保顯示在屏幕上的內容顯示在它所屬的位置。它有很多樣式,非常類似於CSS,但是相對於內部窗口大小,JavaScript動態地完成。

Plz,沒有jQuery解決方案。

我希望我已經足夠具體,並且我能理解你的回覆。我只從事編程業務3個月,而且我沒有接受過真正的教育,所以我只知道到目前爲止,什麼樣的人生教育我。因此,請詳細解釋您如何建議您的代碼應該被使用。

這是一個小事情正在發生。

window.onresize = function(){resize()}; 

...

function resize() 
{ 
... 
var CL = document.getElementById("centerleft"); 
CL.style.position = "absolute"; 
CL.style.overflow = "auto"; 
CL.style.top = quaterCONSTANT+"px"; 
CL.style.left = "0px"; 
CL.style.width = CONSTANT+"px"; 
if (getWidth("menu") > CONSTANT) 
    TL.style.width = getWidth("menu")+"px"; 
CL.style.height = h+"px"; 
CL.style.backgroundColor = "#E6E6E6"; 
... 
} 

常數和quaterCONSTANT是常數和的getWidth(ID)是一個函數來獲取我問於元素的寬度,在這種情況下是寬度我的菜單位於我網頁的左側中央。

現在我每次調整大小時都會發生很多事情。我知道我應該拿出一些東西,比如不要一遍又一遍地將顏色設置成相同的顏色。這應該設置一次,但隨着項目的發展,這種情況就隨之而來。這不是我的初衷,要實現調整大小功能。

  • 莫爾

回答

1

你需要做的是設置一個變量的調整大小的監聽器之外,然後在那裏創建超時什麼。

var resizeTimeout = 0; 

window.onresize = function() { 
    // Clear our previously-scheduled resize if any (no-op if it's 0) 
    clearTimeout(resizeTimeout); 

    // Schedule to resize in X milliseconds 
    resizeTimeout = setTimeout(function() { 
     // Clear our timer handle and do the resize 
     resizeTimeout = 0; 
     resize(); 
    }, timeout); // `timeout` is in milliseconds, so for instance, 100 
}; 

當您調整大小直到您停止,此時超時將完成並激活您的功能,這將繼續重新分配超時。

+1

您是不是也想清除每個resize事件的超時時間?否則,它根本沒有任何幫助,所有的事件仍然會發生 - 只是晚了。 –

+0

「我只從事編程業務3個月,而且我沒有接受過真正的教育,所以我只知道到目前爲止,什麼樣的學校教給我,所以請詳細解釋你是如何建議你的代碼應該被使用的。「 你可以解釋一下更多關於在哪裏放置什麼樣的代碼? 我相信你是正確的關於清除超時問題。我在想,如果我能理解如何,這可能是答案:) – Molle

+0

在哪裏聲明0是無效的超時ID?在哪裏聲明可以安全地將無效超時ID傳遞給'clearTimeout'? – 6502