Без какого-либо примера кода, демонстрирующего вашу проблему, трудно понять, решаю ли я вашу настоящую проблему или нет, но мне удалось попасть в аналогичную ситуацию.
На этой скрипке , которая приблизительно воспроизводит вашу анимацию, источник трансформации изменяется на центр, когда мышь наводит курсор на тело, однако в некоторых браузерах (могут подтвердить текущие Chrome и Chromium 75) значение выиграло ' t обновлять во время работы анимации, если, как вы упомянули, элемент не будет проверен.
Возможный трюк, который я нашел, - сбросить анимацию. Вы можете сделать это, продублировав объявление ключевых кадров и переключившись на альтернативное при изменении источника преобразования:
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(1turn); }
}
@keyframes spin2 {
from { transform: rotate(0deg); }
to { transform: rotate(1turn); }
}
.part {
transform-origin: 0 0;
animation: spin 1.5s ease infinite;
}
body:hover .part {
transform-origin: center;
animation-name: spin2;
}
Вот скрипка , показывающая трюк.
Если вы не хотите дублировать свои ключевые кадры, я полагаю, что вы также можете использовать JS для удаления анимации, принудительного перекомпоновки и добавления его снова. Пример:
// Removes the animation
myElement.style.animation = 'none';
// Forces a reflow - the browser will register that the animation was removed
myElement.clientWidth;
// Adds the animation back (resets it to what is defined in the CSS)
myElement.style.animation = '';