Есть ли какие-то надежды на успешное отображение в браузере?

Я хочу вставить html асинхронно на страницу, а затем выполнить некоторые javascript-коды, связанные с вставленным DOM.

Подобные попытки всегда терпят неудачу, потому что рендеринг DOM в браузере занимает гораздо больше времени, чем выполнение следующих javascript-кодов.

Я встречался с такой проблемой раньше и задал вопрос, но никто не ответил. Это здесь: https://stackru.com/questions/31935005/whats-going-on-with-dom-after-orientationchange-event

Итак, могу ли я получить обещание или добавить функцию обратного вызова?

Коды здесь:

var bubble = function bubble(type,content){
    var myScroll, temp = document.createElement('div');
    temp.innerHTML=content;
    temp.className=type==='time'?'time':'bubble '+type;
    document.getElementsByClassName('dialogue')[0].appendChild(temp);
    if(type==='reply')myScroll = new IScroll('.dlg-wrapper', { mouseWheel: true });
};

2 ответа

Насколько я знаю, такого события нельзя было бы послушать. Но вы можете сделать что-то, что обычно используется для анимации. Чтобы анимации работали плавно и с высокой скоростью, необходимо пакетировать весь доступ DOM, поскольку FastDom.js пытается абстрагироваться.

В общем, оружие выбора должно быть requestAnimationFrame() чтобы ваш DOM имел доступ к фрейму, где браузер обновил DOM.

В твоем случае, new IScroll(...) нужно учиться до querySelector('.dlg-wrapper') на самом деле возвращает нужный элемент.

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

Но вы сказали "а затем выполните некоторые коды JavaScript, связанные с вставленным DOM"., Я не вижу, что происходит в вашем коде.

Во всяком случае, если вы используете setTimeout(callback, 0) Вы можете сделать постобработку в обратном вызове. setTimeout также управляется этой очередью сообщений, поэтому после завершения кода, который изменил DOM, браузер сначала обработает сообщение перерисовки (поскольку оно сначала находится в очереди сообщений), и только затем вызывает обратный вызов.

Другие вопросы по тегам