最近面试遇到这样的问题,要求使用css3动画实现星球运动。

实现思路:

  • 通过圆角实现轨迹和星球;
  • 通过缩放将圆形轨迹缩放呈椭圆;
  • 定义星球x轴和y轴的运动;
1
2
3
4
5
6
7

<!--画出圆形轨迹-->
<div class="track"></div>
<!--画个圆形:(1)控制x轴运动;(2)控制y轴运动;(3)速度曲线-->
<span class="arc">
<i></i>
</span>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

html, body {
background: #000;
font-size: 62.5%;
}

@keyframes arc-x {

0%, 100% {
transform: translateX(0rem);
}
50% {
transform: translateX(-30rem);
}
}

@keyframes arc-y {

0%, 100% {
transform: translateY(0rem);
}
50% {
transform: translateY(30rem);
}
}

.track {
position: absolute;
width: 30rem;
height: 30rem;
border: .1rem solid #fafafa;
border-radius: 30rem;
top: 20%;
left: 50%;
margin-left: -15rem;
}

.arc {
position: absolute;
width: 2rem;
height: 2rem;
margin-left: 14rem;
margin-top: -1rem;
top: 20%;
left: 50%;
z-index: 2;
animation: arc-x 10s 0s ease-in-out infinite;
}

.arc i {
display: inline-block;
width: inherit;
height: inherit;
border-radius: 2rem;
background: #fe0000;
animation: arc-y 10s 2.5s ease-in-out infinite;
}