dart_kinselok
@dart_kinselok
Правильный вопрос содержит 50% искомого ответа...

Keyframe — анимация не завершается, если убрать мышь?

При использовании кейфреймов (наложении анимации с помощью соответствующего свойства animation: ... при наведении мыши) анимация "слетает" и не завершается, если убрать мышь.

Например, есть у меня блок
<div class="cube"> </div>
И я хочу, чтобы он при наведении мыши за 0.8 секунд увеличился-уменьшился-увеличился. Делаю:
.cube{
animation: bounce .8s 1 ease;
}
@keyframes bounce{
0%{
   transform: scale(1);
}
35%{
   transform: scale(0.8);
}
60%{
   transform: scale(1.1);
}
100%{
   transform: scale(1);
}
}


В упор не понимаю, где я мог тупануть - но если убрать с этого кубика мышь, - анимация слетает, так и не завершившись, а чем же ее задержать до конца, конечно, желательно средствами ванильного CSS - хз. Буду благодарен за помощь!
  • Вопрос задан
  • 441 просмотр
Решения вопроса 1
dart_kinselok
@dart_kinselok Автор вопроса
Правильный вопрос содержит 50% искомого ответа...
Решение придумал сам. Костыль жуткий, но...

Элементу собачу функцию, например, a();
У этой функции появляется один атрибут, забирающий значение Id, получается как-то так:
<img ... onmouseover="a(getAttribute(id));">
JS в две строки
function a (gotId) {
   var id_gotId = document.getElementById(gotId); // пихаем DOM-обращение в переменную, дабы не засорять копипастом код
   id_gotId.setAttribute("class", "animation"); // навесили на элемент класс с анимацией
   id_gotId.setAttribute("onmouseover", " "); // исключаем возможность повторного наведения мыши во время анимации
   setTimeout(function(){
     id_gotId.setAttribute("class", " "); // убираем класс для возможности повторного применения анимации
     id_gotId.setAttribute("onmouseover", "a(getAttribute('id'))"); // возвращаем onmouseover-ивент
    }, 750); // время таймера
  }


Ну и, собственно, сам CSS

.animation{
	animation: bounceInAnim .75s 1;
}

@keyframes bounceInAnim {
  from, 20%, 40%, 60%, 80%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  10% { 
    -webkit-transform: scale3d(.3, .3, .3);
    transform: scale3d(.3, .3, .3);
  }

  30% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1);
    transform: scale3d(1.1, 1.1, 1.1);
  }

  40% {
    -webkit-transform: scale3d(.9, .9, .9);
    transform: scale3d(.9, .9, .9);
  }

  60% { 
    -webkit-transform: scale3d(1.03, 1.03, 1.03);
    transform: scale3d(1.03, 1.03, 1.03);
  }

  80% {
    -webkit-transform: scale3d(.97, .97, .97);
    transform: scale3d(.97, .97, .97);
  }

  to { 
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}


Конечно, логичнее это было сделать через addEventsListener, но мне лень:) Саму суть те, кто тоже столкнется с этой проблемой, поймут.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1

но если убрать с этого кубика мышь, - анимация слетает, так и не завершившись.

обьясните что имеется ввиду под словом "слетает"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы