DOM风格的调用受频率限制吗?

时间:2010-02-25 19:01:37

标签: javascript html dom browser

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

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

function setHeightNow(height) { 

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

2 个答案:

答案 0 :(得分:0)

如果你在循环中调用此函数,如他/她的评论中提到的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.
    }
})();

另外

  1. documents.getElementById检查有点无用,因为所有浏览器都支持它。
  2. 如果可能,以某种方式将document.getElementById调用放在此重复函数之外是明智的。

答案 1 :(得分:0)

这肯定不是一个明确的限制;我们运行一个触发30次/秒的动画循环。 (使用33ms超时。)大多数情况下我们移动背景(动画)或调整不透明度(淡入/淡出)但有时我们也会重新调整元素大小。

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