Вызовы в стиле DOM ограничены частотой? - PullRequest
0 голосов
/ 25 февраля 2010

Я пытаюсь изменить размер 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 голосов
/ 25 февраля 2010

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

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

0 голосов
/ 25 февраля 2010

Если вы вызываете эту функцию в цикле, как 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 вне этой повторяющейся функции, если это возможно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...