2010-03-02 2 views
9

В Javascript Я очищаю содержимое DIV, а затем повторно заполняю его, есть ли способ приостановить компоновку этих элементов или заблокировать пользовательский интерфейс, пока я не закончил прокручивать HTML? Я не хочу, чтобы какие-либо сообщения появлялись, я просто не хочу видеть мерцание, когда элементы удаляются/добавляются.Приостановить компоновку во время взаимодействия с DOM

ответ

2

скрыть это, добавив атрибут стиля для отображения: нет, делать вещи, а затем снова отобразить DIV после

+0

Это приводит к тому, что div сбрасывается, я собираюсь проверить настройки высоты и посмотреть, могу ли я поддерживать постоянную высоту при этом, спасибо. – Mantorok

+1

Вы можете поместить внешний div на место, чтобы сохранить согласованный размер ... просто мысль. –

+0

Это то, что я сделал в конце, я забыл, что держатель места div был скрыт, поэтому я помещал в этот div местозаполнитель, и все в порядке. – Mantorok

13

Вы можете создать содержание нового элемента в DocumentFragment, прежде чем вставить его в реальный документ:

var fragment = document.createDocumentFragment(); 
// build node in fragment 

var div = /* … */; // DIV that should be replaced 
div.parentNode.replaceChild(fragment, div); 
+2

В большинстве графических библиотек используется один и тот же «трюк», называемый двойной буферизацией – xtofl

0

только совет может состоять в обновлении содержимого div в целом, путем создания всего содержимого html, а затем добавить его в div innerHTML сразу, как противоположно добавлению элемента в div один за другим, что является более дорогостоящим вычислительным поскольку он включает в себя восстановление дерева деревьев каждый раз (что также легко может вызвать мерцание)

+0

Привет, я добавляю все это сразу, используя функцию html() JQuery. – Mantorok

0

Я обнаружил, что, применяя фиксированную высоту к сортировке сортировки, высота не была установлена ​​до того, как она увеличивалась/уменьшалась с содержимым.

Спасибо за ответы, о и До!