2010-02-25 4 views
0

html 요소 (플래시 객체)의 크기를 조정하려고하는데 초당 1 회 이상 응답하지 않는 것 같습니다.DOM 스타일 호출이 빈도에 의해 제한됩니까?

IE7과 FF3 모두 브라우저에서 부과하는 제한 사항입니까? 다른 방식으로/더 효율적인 방식으로 크기를 조정해야합니까?

function setHeightNow(height) { 

    if (document.getElementById) { 
    if (height > 0) { 
     var scaleItem = document.getElementById('application'); 
     scaleItem.style.height = height + 'px'; 
      } 
    } 
    } 
+2

어떻게'setHeightNow'를 호출합니까? 당신은 반복하고 있습니까? 화면 상에 업데이트되도록하려면 브라우저로 제어권을 되돌려 야합니다. – bobince

+1

플래시와 관련 있다고 생각합니다. 정상적인 요소는 이런 식으로 행동하지 않습니다. –

답변

0

bobince는 그/그녀의 코멘트에서 언급 한대로, 루프에서이 함수를 호출하는 경우, 다시 브라우저로 제어 할 수 있도록 setTimeout 전화 (또는 setInterval)의 시리즈로 변경해야합니다. 모든 브라우저를 지원하기 때문에 this-

var i = INITIAL_VALUE; 

(function() { 
    setHeightNow(foo); 
    if (i < FINAL_VALUE) { 
     i++; 
     setTimeout(arguments.callee, 0); //you can play around with the timeout. 
    } 
})(); 

같은

뭔가 또한

  1. documents.getElementById 검사는 종류의 쓸모가 없다.
  2. 가능한 경우이 반복 기능 밖에서 document.getElementById 호출을하는 것이 좋습니다.
+0

OP 업데이트 : 이것은 Flash Player ExternalInterface.call()을 통해 한 번만 호출되며 현재는 어떤 종류의 루프도 수행되지 않습니다. ~ 1 클릭/초보다 자주 클릭하면 문제가 발생합니다. 내 테스트에서 ExternalInterface.call()은 가능한 한 자주 setHeightNow() 메서드에 도달 할 수 있지만 "scaleItem.style.height = height + 'px';" 작동하지 않습니다. 내가 변경하려고하는 요소가 잠겨져 있거나 브라우저의 렌더링 엔진에서 계속 업데이트되고있을 가능성이 있습니까? 그것이 "준비가되어 있는지"볼 수있는 방법이 있습니까? –

0

분명히 정의 된 제한 사항은 아닙니다. 우리는 초당 30 번 트리거되는 애니메이션 루프를 실행합니다. (33ms 타임 아웃을 사용합니다.) 주로 배경을 움직이게하거나 (애니메이션) 불투명도 (페이드 인/아웃)를 조정하지만 때로는 요소의 크기를 조정합니다.

그러나 모든 요소는 절대적으로 배치되었거나 고정 된 컨테이너에 있으므로 브라우저에서 다시 레이아웃을 트리거하지 않습니다. 나는 당신의 문제가 그 재 레이아웃을 수행하는 데 드는 비용이라고 생각하는데, 그 대부분은 플래시 객체 그 자체 일 것이다.

관련 문제