css3 动画animation 及@keyframes 规则

本文介绍了CSS和JavaScript实现动画的方式及其区别。CSS动画通过`@keyframes`规则和`animation`属性轻松创建,适合简单的状态切换和滑动效果,而JS动画提供更精细的控制,如开始、暂停、回放,适用于复杂UI和精确计算的场景。CSS动画在低性能浏览器中能自然降级,但控制力较弱;JS动画虽然可操作性强,但可能因逐帧绘制导致不连贯。选择哪种方式取决于具体项目需求。
摘要由CSDN通过智能技术生成

前端实现动画效果无非jscss 两种,这里主要讲一下css动画的实现以及区别

@keyframes 规则

//宽度从100px 变成 200px
// boxW 为 方法名

@keyframes boxW {
  from {width:100px;}
  to {width:200px;}
}

//或 
//from(与 0% 相同); to(与 100% 相同)

@keyframes boxW {
  0%   {width:100px;}
  100% {width:200px;}
}

animation 属性

//示例 使用 boxW 方法,div会在5秒内从100px 变为 200px
div {
  animation: boxW 5s infinite;
}
描述
animation-name规定需要绑定到选择器的 keyframe 名称。。
animation-duration规定完成动画所花费的时间,以秒或毫秒计。
animation-timing-function规定动画的速度曲线。
animation-delay规定在动画开始之前的延迟。
animation-iteration-count规定动画应该播放的次数。
animation-direction规定是否应该轮流反向播放动画。
animation-fill-mode属性规定动画在播放之前或之后,其动画效果是否可见。

animation-timing-function

描述
linear动画从头到尾的速度是相同的。
ease默认。动画以低速开始,然后加快,在结束前变慢。
ease-in动画以低速开始。
ease-out动画以低速结束。
ease-in-out动画以低速开始和结束。
cubic-bezier(n,n,n,n)在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。

animation-iteration-count

描述
n定义动画播放次数的数值。
infinite规定动画应该无限次播放。

animation-fill-mode

描述
none不改变默认行为。
forwards当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)。
backwards在 animation-delay 所指定的一段时间内,在动画显示之前,应用开始属性值(在第一个关键帧中定义)。
both向前和向后填充模式都被应用。

animation-direction

描述
normal默认值。动画应该正常播放。
alternate动画应该轮流反向播放。

js与css 动画的区别

js动画

优点:

  • js动画代码复杂,因此可操作性高,可以对动画比较好的控制,例如:开始、暂停、回放、取帧等

  • 动画效果比css3动画丰富,有些动画效果,比如曲线运动,冲击闪烁,视差滚动效果,只有js动画才能完成

  • css3有兼容性问题,而JS大多时候没有兼容性问题

缺点:

  • js动画是逐帧动画,是在时间帧上逐帧绘制帧内容,由于是一帧一帧的话,虽然可操作性高,但是如果帧率过低的话,会帧与帧之间的过渡很可能会不自然、不连贯。

  • (2)代码的复杂度高于CSS动画

css 动画

优点:

  • 制作方法简单方便。只需确定第一帧和最后一帧的关键位置即可,两个关键帧之间帧的内容由Composite线程自动生成,不需要人为处理。

  • (3)对于帧速表现不好的低版本浏览器,css3可以做到自然降级,而JS则需要撰写额外代码

缺点:

  • 想要做到一些酷炫的效果的时候,其操作往往可能会比js操作有更多的冗余。

  • 因为只设置几个关键帧的位置,所以在进行动画控制的时候时比较弱的。不能够在半路暂停动画,或者在动画过程中不能对其进行一些操作等。

总结

如果动画只是一些简单的状态切换,滑动等效果,不需要中间的控制过程,css3是比较好的选择,它直接在css文件中就可以实现,并不需要引入太多的js库。而你想做一些复杂的客户端界面,开发一个复杂ui的app,实现一个复杂纹理动画等,需要对页面进行精准的控制计算,js是不错的选择。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值