我在CSS中设置为opacity: 0;
的元素上运行一个动画,动画类应用于onClick,并且使用关键帧,它将不透明度从0
更改为1
(以及其他内容)。
不幸的是,当动画结束时,元素返回到opacity: 0
(在Firefox和Chrome中)。我的自然想法是动画元素保持最终状态,覆盖它们的原始属性。这是不正确的吗?如果不是,我如何让元素这样做?
代码(不包括前缀版本):
@keyframes bubble {
0% { transform:scale(0.5); opacity:0.0; }
50% { transform:scale(1.2); opacity:0.5; }
100% { transform:scale(1.0); opacity:1.0; }
}
5条答案
按热度按时间gojuced71#
尝试添加
animation-fill-mode: forwards;
。例如,缩写的用法如下:wljmcqd82#
如果要使用更多动画属性,简写为:
这给出:
bubble
动画名称2s
持续时间linear
定时函数0.5s
延迟1
迭代计数(可以是"infinite
")normal
方向forwards
fill-mode(如果您希望兼容使用结束位置作为最终状态,请设置"向后"[这是为了支持关闭动画的浏览器] {并且仅回答标题,而不是您的特定情况})goucqfw63#
如果不使用速记版本:确保
animation-fill-mode: forwards
在动画声明之后,否则将无法工作...对比
nhjlsmyf4#
使用动画填充模式:转发;
元素将保留由最后一个关键帧设置的样式值(取决于animation-direction和animation-iteration-count)。
注:Internet Explorer 9和早期版本不支持@keyframes规则。
工作示例
x一个一个一个一个x一个一个二个x
nwsw7zdq5#
我在使用
forwards
时遇到问题:至少在Chrome中,即使在动画结束后,渲染器仍在消耗图形资源,使应用程序响应速度变慢。一种不会引起此问题的方法是使用
EventListener
。CSS动画会发出事件,因此您可以使用animationend事件在动画结束时进行干预。
选项
once: true
告知引擎在执行事件侦听器后删除该侦听器,使应用程序保持新鲜和干净。我创建了一个JSFiddle来展示它是如何工作的。