如何在同一元素上应用新的变换动画,而另一个是 运行

How to apply a new transform animation while other one is running on the same element

当用户点击“space”时,我在 运行 元素上有一个基本的固定动画:

&.pop {
        animation: pop 1s ease-in 20ms 1 normal both;
}


@keyframes pop {
    0% {
        transform: rotate(0deg);
        transform-origin: 30px;
    }
    20% {
        transform: rotate(-30deg);
        transform-origin: 30px;
    }
    40% {
        transform: rotate(-10deg) translate(-2px, -20px);
        transform-origin: 30px;
    }
    60% {
        transform: rotate(0deg) translate(0, -40px);
        transform-origin: 30px;
    }
    80% {
        transform: rotate(3deg) translate(2px, -20px);
        transform-origin: 30px;
    }
    100% {
        transform:translate(0,0);
        transform-origin: 30px;
    }
}

现在,我想在 onkeydown 添加不同的其他变换动画,它们将 运行 与当前动画同时进行,例​​如:

&.spin {
        animation: spin 500ms ease-out 20ms 1 forwards;
    }

@keyframes spin {
    0% {
        transform: rotateY(0);
    }
    100% {
        transform: rotateY(180deg);
    }
}

所以我的问题是,当我添加第二个“旋转”class 时,它 运行 覆盖了我的第一个“弹出”动画。 添加它而不是 运行结束的方法是什么?

如果我正确理解你的问题:
您可以在转换中使用多个动画:
就像这样:

transform: rotate(90deg) translate(150px, -230px); 

或者您可以使用另一种方法:
您可以用两个外部 div 包裹您的目标元素,并为每个 div..
分配一个动画 就这样

<div class="apply_this_animation">
    <div class="apply_this_animation_also">
        <img src="https://via.placeholder.com/300x300" alt="#" />
    </div>
</div>

并在您 CSS 中使用它,就像这样:

<style>
.apply_this_animation {
    transform: rotate(90deg); 
}

.apply_this_animation_also {
    transform: translate(150px, -230px); 
}
</style>

Read More