Про сам
will-change все понятно.
Читаем документацию. Делаем выводы и следуем рекомендациям, например.
Там советуют дописать в js следующий код
var el = document.getElementById('element');
// Set will-change when the element is hovered
el.addEventListener('mouseenter', hintBrowser);
el.addEventListener('animationEnd', removeHint);
function hintBrowser() {
// The optimizable properties that are going to change
// in the animation's keyframes block
this.style.willChange = 'transform, opacity';
}
function removeHint() {
this.style.willChange = 'auto';
}
Это нужно, чтобы
will-change не висел просто так перманентно, а присваивался только в момент события
mouseenter.
В связи с этим вопрос, почему бы не использовать
:hover в CSS? Это ведь проще и не нужно лишний раз обрабатывать весь DOM. Или такой вариант не сработает?
Почему бы мне не повесить на элемент следующие стили?
.element:hover {
will-change: transform;
transition: transform .5s ease-in;
}
Задаю этот вопрос с точки зрения оптимизации производительности. В моем понимании, чем меньше JS, тем лучше, особенно на сильнонагруженных DOM-элементами страницах. Но MDN рекомендует использовать JS и ни слова не говорит про :hover.