используя setTimeout'ы? блок кода в setTimeout вызовется (без обертки с setTimeout) раньше, чем присвоится желтый цвет элементу DOM. Код ниже - рабочий.
form.onclick = function(event) {
event.target.style.backgroundColor = 'yellow';
// браузеру нужно некоторое время, чтобы зарисовать всё жёлтым
setTimeout(() => {
alert("target = " + event.target.tagName + ", this=" + this.tagName);
event.target.style.backgroundColor = ''
}, 0);
};
https://plnkr.co/edit/i3Q6mJoVe8HyXxdx?p=preview&preview
Я думаю setTimeout самый правильный способ дождаться reflow, но есть способы вынудить его быть выполненным "прямо сейчас". https://gist.github.com/paulirish/5d52fb081b3570c81e3a Выглядит как хак, возможно полезный для css transitions, но здесь тоже должны быть практики получше.
хотел бы уточнить, что такое reflow ... upd. а, статья про это, ушел читать :)
разобрался, явно тоже самое делается с помощью вот этой штуки https://developer.mozilla.org/ru/docs/Web/API/MutationObserver
Каким образом? Возможно это api опосредованно связано с reflow, так как в процессе reflow вычисляются изменения, на этом собственно говоря и всё.
Обсуждают сегодня