Обнаружение изменений DOM браузера завершено - PullRequest
0 голосов
/ 03 ноября 2010

У меня есть код JavaScript, который добавляет новый XHTML к уже существующей странице (дерево DOM).Элементы моей страницы являются динамическими, поэтому добавление новых элементов вызывает изменения в размере других элементов.У меня есть пользовательская реализация полосы прокрутки, которая зависит от этих размеров и должна быть сброшена при каждом их изменении.

Я вызываю метод сброса вскоре после оператора, который вставляет новый XHTML.Но, похоже, это слишком рано.Иногда полоса прокрутки не корректируется должным образом.Если я добавлю некоторую задержку перед сбросом, это нормально, но я считаю это слишком грубым и ненадежным решением.

Мне нужно либо:

Определить, когда данный элемент DOM завершает изменение размера

или

Обнаружение, когда все изменение DOM заканчивается вместе с изменением макета.

Пока я ничего не мог найти.Я знаю, что ситуация слишком сложна для большинства людей, но я надеюсь, что кто-нибудь сможет помочь.Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 ноября 2010

Как насчет опроса, где вы проверяете состояние домена? Это с jQuery и будет вызывать resetMyScrollbar всякий раз, когда HTML в теле страницы обновляется с максимальной задержкой в ​​полсекунды.

var lastDom = "";
function checkDomHash() {
  var newDom = $("body").html();
  if (newDom != lastDom) {
    resetMyScrollbar();
  }
  window.setTimeout(checkDomHash, 500);
}

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

var lastDomHash = "";
...
  var newDomHash = md5OrWhatever($("body").html());
  ...

Редактировать

Или вы можете проверить высоту любой полосы прокрутки.

var lastHeight = 0;
...
  var newHeight = $("#my_element_id").outerHeight();
  ...
0 голосов
/ 03 ноября 2010

Попробуйте событие onload.

...