Я бы справился с этим с помощью анимации вместе с некоторыми JavaScript
. Когда пользователь наводит указатель мыши на #one
, мы добавляем класс hover
к body
, на который будет реагировать элемент #one
. На этом этапе #one
включает pointer-events: none
, чтобы гарантировать, что любое дополнительное зависание не будет повторно запускать анимацию. После завершения анимации мы удаляем класс hover
из body
, позволяя анимации снова начинаться после регистрации нового события наведения мыши.
const one = document.getElementById("one");
one.addEventListener("mouseover", () => {
document.body.classList.add("hover");
});
one.addEventListener("animationend", () => {
document.body.classList.remove("hover");
});
@keyframes oneAnimation {
to {
transform: translate(-15px, -15px) rotate3d(1, 1, 1, 360deg) scale(1.1);
}
}
#one {
color: green;
border: 0px solid red;
border-radius: 8px;
}
.hover #one {
pointer-events: none;
color: white;
background-color: rgba(255, 0, 0, 1);
border: 2px solid white;
border-radius: 8px;
box-shadow: 0px 10px 20px 0px rgba(0, 0, 0, 0.8);
animation: oneAnimation 1s forwards 0.3s;
}
<div id="one">one</div>
jsFiddle