前言

transition CSS 属性是 transition-property,transition-duration,transition-timing-function 和 transition-delay 的一个简写属性。
其中transition-timing-function潜力最大也最为复杂,值得进行研究。

常用预定义关键字

我们所知道的常用的easing函数有:linear,ease,ease-in,ease-out,ease-in-out,以及step函数:step-start,step-end,steps(n,start),steps(n,end)。
当然,为了得到更多的自定义easing函数,我们可以去研究贝塞尔(cubic-bezier)曲线,网上也能找到一些有趣的贝塞尔函数值。这里不多做解释,仅对预定义关键字进行演示。

实现代码

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<title>demo1</title>
<style>
.runner,
.track {
height: 80px;
}

.track {
width: 500px;
margin: 10px 0px;
background: yellow;
text-align: center;
line-height: 80px;
font-size: 20px;
}

.runner,
.track:hover>.runner {
transition: transform 1s;
}

.runner {
width: 100px;
border: solid;
line-height: 80px;
position: absolute;
}

.track:hover>.runner {
transform: translate(400px);
}

.track>.linear,
.track:hover>.linear {
transition-timing-function: linear
}

.track>.ease-in,
.track:hover>.ease-in {
transition-timing-function: ease-in
}

.track>.ease-out,
.track:hover>.ease-out {
transition-timing-function: ease-out
}

.track>.ease-in-out,
.track:hover>.ease-in-out {
transition-timing-function: ease-in-out;
}

.track>.steps-start,
.track:hover>.steps-start {
transition-timing-function: steps(5, start);
}

.track>.steps-end,
.track:hover>.steps-end {
transition-timing-function: steps(5, end);
}
</style>
</head>

<body>
<div class="track-container">
<div class="track">
<div class="runner linear"></div>
linear赛道,匀速
</div>
<div class="track">
<div class="runner ease"></div>
ease赛道:默认值,起步快,减速
</div>
<div class="track">
<div class="runner ease-in"></div>
ease-in赛道:加速
</div>
<div class="track">
<div class="runner ease-out"></div>
ease-out赛道:减速
</div>
<div class="track">
<div class="runner ease-in-out"></div>
ease-in-out赛道:先加速后减速
</div>
<div class="track">
<div class="runner steps-start"></div>
steps(5,start)赛道:20% 40% 60% 80% 100%
</div>
<div class="track">
<div class="runner steps-end"></div>
steps(5,end)赛道:0 20% 40% 60% 80%
</div>
</div>
</body>

</html>

眼见为实

把鼠标悬停到赛道上,看每个runner奔跑吧。

小tips

此处布局也使用了无依赖绝对定位技巧,不了解的可以看上一篇哦!

后记

通过transition-timing-function我们可以得到很多运动轨迹,如何把这些有着不同特点的运动轨迹应用于实际,需要我们不停地实践与积累。