Javascript DOM样式的调用是否受频率限制?

Javascript DOM样式的调用是否受频率限制?,javascript,html,dom,browser,Javascript,Html,Dom,Browser,我试图调整html元素(flash对象)的大小,但它似乎每秒响应不超过一次 这是浏览器强加的限制吗(IE7和FF3都这么做)? 或者我应该尝试以不同/更有效的方式调整大小 function setHeightNow(height) { if (document.getElementById) { if (height > 0) { var scaleItem = document.getElementById('application');

我试图调整html元素(flash对象)的大小,但它似乎每秒响应不超过一次

这是浏览器强加的限制吗(IE7和FF3都这么做)? 或者我应该尝试以不同/更有效的方式调整大小

function setHeightNow(height) { 

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

如果您在循环中调用此函数,如bobince在其评论中所述,则应将其更改为一系列
setTimeout
调用(或
setInterval
),以将控制权返还给浏览器

像这样的-

var i = INITIAL_VALUE;

(function() {
    setHeightNow(foo);
    if (i < FINAL_VALUE) {
        i++;
        setTimeout(arguments.callee, 0); //you can play around with the timeout.
    }
})();
var i=初始值;
(功能(){
设置高度(foo);
如果(i<最终值){
i++;
setTimeout(arguments.callee,0);//您可以处理超时。
}
})();

  • documents.getElementById
    检查有点无用,因为所有浏览器都支持它
  • 如果可能的话,明智的做法是将
    document.getElementById
    调用放在这个重复函数之外

  • 这当然不是一个明确的限制;我们运行一个每秒触发30次的动画循环。(使用33毫秒的超时时间)通常我们会移动背景(动画)或调整不透明度(淡入/淡出),但有时我们也会调整元素的大小


    但是,所有这些元素都是绝对定位的,或者位于固定的容器中,因此不会触发浏览器的重新布局。我怀疑您的问题仅仅是执行重新布局的成本,其中大部分将取决于flash对象本身。

    您如何调用
    setHeightNow
    ?你是在循环吗?您需要将控件返回到浏览器,以使其在屏幕上更新。我认为这与flash有关。普通元素不会以这种方式运行。OP UPDATE:这只通过flash player ExternalInterface.call()调用一次,当前不在任何类型的循环中。如果我的单击频率超过每秒~1次,则会出现此问题。根据我的测试,ExternalInterface.call()可以尽可能多地访问setHeightNow()方法,但是“scaleItem.style.height=height+'px';”不起作用。是否有可能我正在尝试更改的元素被浏览器的渲染引擎锁定或仍在更新?有没有办法看看它是否“准备就绪”?