2011-11-07 5 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에 심지어 크롬, 매우 느리게 실행되는 것을, 심지어 '해봐요'는 바로 수행 할 때 '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

관련 문제