Я пытаюсь восстановить анимацию объекта до начальной точки, чтобы я мог перезапустить его с самого начала.
function swap_animation(node, from, to) {
let t = node.style.animationDuration;
node.style.animationDuration = "0s";
node.style.animationPlayState = "initial";
setTimeout(function(){
node.style.animationDuration = t;
node.classList.remove(from);
node.classList.add(to);
}, 10);
}
function grow() {
let node = document.getElementById("item");
swap_animation(node, "shrink", "grow");
}
function shrink() {
let node = document.getElementById("item");
swap_animation(node, "grow", "shrink");
}
.grow {
animation-name: title-min;
animation-duration: 10s;
animation-timing-function: linear;
animation-fill-mode: forwards;
transform-origin: 0% 100% 0;
}
.shrink {
animation-name: title-min;
animation-duration: 10s;
animation-timing-function: linear;
animation-direction: reverse;
animation-fill-mode: forwards;
transform-origin: 0% 100% 0;
}
@keyframes title-min
{
from { transform: scale(0.5); }
to { transform: scale(1.0); }
}
<body>
<button onclick="grow()">Eat me! ?</button>
<button onclick="shrink()">Drink me! ?</button>
<h1 id="item">Alice ?</h1>
</body>
Пример показывает, что если вы нажмете между Съешь меня! и Выпей меня! , Алиса растет и сжимается в течение 10 секунд. Однако, если вы переключаетесь между ними, вы заметите, что анимация продолжается с того места, где она была до переключения.
Мне кажется, я где-то читал, что один из способов сделать это - клонировать объект и заменить старый на новый. Это кажется излишним, и я думаю, что это может вызвать проблемы с производительностью, особенно если объект большой, а также плохим, так как может вызвать фрагментацию памяти.
Должен быть какой-то способ сохранить объект и изменить его свойства, чтобы исправить это, не так ли?