我有两个动画:在元件加载和悬停时:
div {
animation: slide-up 2s;
-webkit-animation: slide-up 2s;
-moz-animation: slide-up 2s;
}
div:hover{
animation: rotate 2s;
-webkit-animation: rotate 2s;
-moz-animation: rotate 2s;
}
slide-up
动画在元素加载后运行,rotate
在元素悬停时运行。然而,现在元素在鼠标离开时向上滑动,我不知道如何防止这种情况。所以我想关闭悬停时的slide-up
动画。
旋转动画使用transform
属性,上滑只更改margins
。
4条答案
按热度按时间bqjvbblv1#
原因:
由于以下原因,当您将鼠标移出元素时,
slide-up
动画将再次执行:slide-up
)。浏览器执行此动画。animation
属性再次只指定一个动画(即rotate
)。这会使浏览器从元素中删除slide-up
动画。删除动画也会使浏览器忘记它的执行状态或执行计数。div
选择器将适用于该元素,因此浏览器再次删除rotate
动画并附加slide-up
动画。由于它正在被重新附加,浏览器认为它必须再次执行它。解决方案:
您可以通过确保动画实际上永远不会从元素中删除***(即使
:hover
打开且animation-iteration-count
为1),使上滑动画仅运行一次。在下面的代码片段中,你会注意到我是如何在
:hover
选择器中保留slide-up
动画定义的,这使得浏览器看到这个动画,因为这个动画已经在加载时执行过一次,所以它不会再执行一次(因为迭代计数)。(*注意:****为了避免混淆,
animation-iteration-count
的默认值是1,但为了解释起见,我将其显式化。这不是主要原因,只是一个额外的步骤,以确保其值不会搞乱解决方案。)jgwigjjp2#
只需添加
animation-play-state: paused;
w1jd8yoj3#
只需在逗号后添加另一个动画。例如,如果我想创建一个将淡入(第一个动画)的盒子,然后它的阴影大小不断变化(第二个动画),那么这就是我要使用的CSS:
pkwftd7m4#
...此外,如果你需要在一个元素上应用2个动画而不需要悬停它,你应该按照下面的例子进行双重调用。
首先,定义
@keyframes
名称和属性;在我们例子中是fadeIn
和spin
。然后,按此方式进行:
;)
ps:如果你需要更多的澄清或先进的技术,通过留在CSS只,并中肯地对这个问题,只要回答后(如果不死)我会回来尽快。