前言
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我们可以得到很多运动轨迹,如何把这些有着不同特点的运动轨迹应用于实际,需要我们不停地实践与积累。