2011-11-07 39 views
0

我有類似下面的一些腳本:加快窗口大小調整功能性能

var breakpoints = [0,240,480,960,9999], 
    bpCount = breakpoints.length, 
    windowsize = 0; 

window.onresize = function() { 

    windowsize = document.body.clientWidth; 

    for(var i=0; i<bpCount; i++) { 
     if(windowsize >= breakpoints[i] && windowsize < breakpoints[i+1]) { 
      doSomething(breakpoints[i]); 
      break; 
     } 
    }  

}; 

然而,這似乎體面的PC上漂亮運行緩慢,甚至在Chrome中,即使「DoSomething的」剛執行一個'console.log',所以我只是想知道是否有更好的方法來檢查屏幕大小是否在兩個值之間調整大小?

感謝

+0

也許一個小函數調節/反彈可以幫助,例如使用下劃線庫:http://documentcloud.github.com/underscore/#throttle – biziclop

+0

你只想爲每個範圍調用一次'doSomething()'嗎? – SLaks

回答

6

不要輪詢大小每一次。你使用太多的計算能力。

相反,做一個計時器,檢查大小,每隔一段時間(10 ms可能是太快了):

var checkWindowSizeTimer; 

function checkWindowSize() { 
    var windowsize = document.body.clientWidth; 

    if (windowsize >= breakpoints[i] && windowsize < breakpoints[i+1]) { 
     doSomething(breakpoints[i]); 
     clearInterval(checkWindowSizeTimer); 
    } 
} 

window.onresize = function() { 
    checkWindowSizeTimer = setInterval(checkWindowSize, 10); 
} 

當窗口大小過去的邊界,計時器退出。

+0

不會延遲功能更慢嗎?我基本上只是想知道是否有更快的方法來檢查特定數字的範圍。 – rwacarter

+0

它會減慢你想要做的事情,但是比你的方法要少得多。用戶不會快速移動鼠標來注意。 – Blender