2010-02-25 2 views
0

Я пытаюсь изменить размер элемента html (flash-объект), но он не реагирует более одного раза в секунду?Являются ли вызовы стиля 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 UPDATE: Это вызывается только один раз через флеш-плеер ExternalInterface.call(), но не в настоящий момент в любом цикле. Проблема возникает, если я нажимаю чаще, чем ~ 1 клик/сек. Из моих тестов ExternalInterface.call() может достигать метода setHeightNow() как можно чаще, но «scaleItem.style.height = height + 'px';" не работает. Возможно ли, что элемент, который я пытаюсь изменить, заблокирован или все еще обновляется движком рендеринга браузера? Есть ли способ убедиться, что он «готов»? –

0

Это, конечно, не определенное ограничение; мы запускаем цикл анимации, который запускается 30 раз/сек. (Использование тайм-аута 33 мс.) В основном мы перемещаем фоны вокруг (анимации) или корректируем непрозрачность (затухают в/из), но иногда мы также изменяем размер элементов.

Однако все эти элементы абсолютно расположены или в фиксированном контейнере, поэтому браузер не вызывает повторную компоновку. Я подозреваю, что ваша проблема - это просто стоимость выполнения этой перекомпоновки, большая часть которой будет связана с самим объектом вспышки.

Смежные вопросы