Решение придумал сам. Костыль жуткий, но...
Элементу собачу функцию, например, 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, но мне лень:) Саму суть те, кто тоже столкнется с этой проблемой, поймут.