.demo1 {
width: 100px;
height: 100px;
background: red;
transition: width 1s; /* 実際にはprefixが必要 */
}
.demo1:hover {
width: 800px;
}
.demo2 {
width: 100px;
height: 100px;
background: red;
animation: demo2 1s infinite alternate;
}
@keyframes demo2 {
0% { width: 100px }
100% { width: 800px }
}
A地点からB地点まで500pxの距離を1秒かけてアニメーションするケースを考える
transition-timing-function: cubic-bezier(n, n, n, n);
※ n: 0〜1 の数値
transition-timing-function: ease-in-out;
ease (デフォルト) |
cubic-bezier(0.25, 0.1, 0.25, 1.0) | 徐々に加速し、終わりに減速する |
---|---|---|
linear | cubic-bezier(0.0, 0.0, 1.0, 1.0) | 常に等速で移動する |
ease-in | cubic-bezier(0.42, 0, 1.0, 1.0) | ゆっくり始まる |
ease-out | cubic-bezier(0, 0, 0.58, 1.0) | ゆっくり終わる |
ease-in-out | cubic-bezier(0.42, 0, 0.58, 1.0) | ゆっくり始まりゆっくり終わる |
P1x、P1y、P2x、P2yを入力値としてイージングの関数を返す関数を実装する
function cubicBezier(p1x, p1y, p2x, p2y) {
return function(x, t, b, c, d) {
// なんか小難しい処理
}
}