CSS动画实例:涡旋
设页面中有<div class=" vortex "></div>,若定义. vortex的样式规则和关键帧如下:
.vortex
{
position: relative;
margin: 100px auto;
border-radius: 50%;
width:200px;
height:200px;
border: 4px solid transparent;
animation: rotate 3s linear infinite;
border-top-color: rgba(255, 0, 0, 0.8);
border-bottom-color: rgba(0, 0,255, 0.8);
}
@keyframes rotate
{
0% { transform: rotate(0deg); }
50% { transform: rotate(180deg); }
100% { transform: rotate(360deg); }
}
可在页面中呈现出如图1所示的旋转动画。
图1 相对两段弧的旋转
若在页面中放置9个如图1所示的弧段,并且这个9个弧段所在的圆同圆心,9个圆的半径依次相差10px,定义动画关键帧,使这9个弧段旋转起来,可得到涡旋的动画效果。
编写的HTML文件如下。
<!DOCTYPE html>
<html>
<title>涡旋</title>
<head>
<style>
.container
{
position: relative;
margin: 50px auto;
width: 400px;
height:400px;
background:#d8d8d8;
border: 4px solid rgba(255, 0, 0, 0.9);
border-radius: 10%;
}
.vortex
{
position: relative;
margin: 50px auto;
width: 300px;
height: 300px;
display: block;
overflow: hidden;
}
.vortex div
{
box-sizing: border-box;
border-radius: 50%;
padding: 10px;
height: 100%;
border: 4px solid transparent;
animation: rotate linear 4s infinite;
border-top-color: rgba(255, 0, 0, 0.8);
border-bottom-color: rgba(0, 0,255, 0.8);
}
@keyframes rotate
{
0% { transform: rotate(0deg); }
50% { transform: rotate(180deg); }
100% { transform: rotate(360deg); }
}
div:hover
{
animation-play-state: paused;
}
</style>
</head>
<body>
<div class="container">
<div class='vortex'>
<div><div><div><div><div><div><div><div><div>
</div></div></div></div></div></div></div></div></div>
</div>
</div>
</body>
</html>
在浏览器中打开包含这段HTML代码的html文件,可以呈现出如图2所示的动画效果。
图2 涡旋(1)
在动画运行时,若将鼠标移动到某个弧段对应的<div>上,则该<div>之内的弧段会旋转,之外的弧段暂停旋转,呈现出如图3所示的动画效果。
图3 可暂停旋转的涡旋
若将上面.vortex div样式定义中的语句“border-bottom-color: rgba(0, 0,255, 0.8);”,修改为“border-left-color: rgba(255, 0,0,0.5);”,其余部分保持不变,则红色弧段为一个半圆,此时呈现出如图4所示的动画效果。
图4 涡旋(2)
若再将.vortex div样式定义中的语句“animation: rotate linear 4s infinite;”修改为:
animation: rotate 3s cubic-bezier(0.55, 0.38, 0.21, 0.88) infinite;
则动画的执行过程不再是匀速的,而是按在立方贝塞尔函数中定义速度函数进行运行,此时呈现出如图5所示的动画效果。
图5 涡旋(3)
若只是删除掉.vortex div样式定义中的语句border-bottom-color: rgba(0, 0,255, 0.8);,则蓝色弧段被删掉,只剩下红色弧段,此时呈现出如图6所示的动画效果。
图6 涡旋(4)
若修改.vortex div样式定义如下:
.vortex div
{
box-sizing: border-box;
border-radius: 50%;
padding: 10px;
height: 100%;
border: 4px solid transparent;
animation: rotate 3s linear infinite;
border-top-color: rgba(255, 0, 0, 0.5);
border-left-color: rgba(255,255,0,0.5);
border-right-color: rgba(0,0,255,0.5);
}
此时圆弧由黄色、红色和蓝色三段组成,呈现出如图7所示的动画效果。
图7 涡旋(5)