Easing
更新日: 2019-01-24
linear
アニメーションにイージングを適用しません。
不透明度や色変化アニメーションに便利です。
easing: 'linear'anime({
targets: '.linear-easing-demo .el',
translateX: 250,
direction: 'alternate',
loop: true,
easing: 'linear'
});デモ
JavaScript
var linear = anime({
targets: '#linear .el',
translateX: 250,
direction: 'alternate',
loop: true,
easing: 'linear'
});HTML
<div id="linear">
<div class="line">
<div class="square shadow"></div>
<div class="square el"></div>
</div>
</div>CSS
.shadow {
position: absolute;
opacity: .2;
}
.square {
pointer-events: none;
width: 28px;
height: 28px;
margin: 1px;
font-size: 12px;
}Robert Pennerのeasing関数
Robert Pennerのeasing関数が組み込まれています。
easings.netで動きを確認してください。
easing: 'easeInOutSine'指定可能なイージング
| In | Out | In-Out |
|---|---|---|
easeInQuad | easeOutQuad | easeInOutQuad |
easeInCubic | easeOutCubic | easeInOutCubic |
easeInQuart | easeOutQuart | easeInOutQuart |
easeInQuint | easeOutQuint | easeInOutQuint |
easeInSine | easeOutSine | easeInOutSine |
easeInExpo | easeOutExpo | easeInOutExpo |
easeInCirc | easeOutCirc | easeInOutCirc |
easeInBack | easeOutBack | easeInOutBack |
var demoContentEl = document.querySelector('.penner-equations-demo');
var fragment = document.createDocumentFragment();
function createEasingDemo(easing) {
var demoEl = document.createElement('div');
demoEl.classList.add('stretched','square','el');
anime({
targets: demoEl,
translateX: 250,
direction: 'alternate',
loop: true,
delay: 200,
endDelay: 200,
easing: easing,
});
fragment.appendChild(demoEl);
}
for (var easeName in anime.penner) {
if (Array.isArray(anime.penner[easeName])) {
createEasingDemo(easeName);
}
}
demoContentEl.innerHTML = '';
demoContentEl.appendChild(fragment);デモ
JavaScript
var demoContentEl = document.querySelector('#penner');
var fragment = document.createDocumentFragment();
function createEasingDemo(easing) {
var demoEl = document.createElement('div');
demoEl.classList.add('stretched','square','el');
anime({
targets: demoEl,
translateX: 250,
direction: 'alternate',
loop: true,
delay: 200,
endDelay: 200,
easing: easing,
});
fragment.appendChild(demoEl);
}
for (var easeName in anime.penner) {
if (Array.isArray(anime.penner[easeName])) {
createEasingDemo(easeName);
}
}
demoContentEl.innerHTML = '';
demoContentEl.appendChild(fragment);HTML
<div id="penner"></div>CSS
.shadow {
position: absolute;
opacity: .2;
}
.square {
pointer-events: none;
width: 28px;
height: 28px;
margin: 1px;
font-size: 12px;
}
.stretched {
height: 2px;
}3次ベジェ曲線
独自の3次ベジェ曲線を指定するにはcubicBezier(x1, y1, x2, y2)を使用してください。
easing: 'cubicBezier(.5, .05, .1, .3)'独自のベジェ曲線を作成するにあたり、Ceaserのようなベジェ曲線ジェネレーターを使うことができます。
anime({
targets: '.cubic-bezier-demo .el',
translateX: 250,
direction: 'alternate',
loop: true,
easing: 'cubicBezier(.5, .05, .1, .3)'
})デモ
JavaScript
var customBezier = anime({
targets: '#customBezier .el',
translateX: 250,
direction: 'alternate',
loop: true,
easing: 'cubicBezier(.5, .05, .1, .3)'
});HTML
<div id="customBezier">
<div class="line">
<div class="square shadow"></div>
<div class="square el"></div>
</div>
</div>CSS
.shadow {
position: absolute;
opacity: .2;
}
.square {
pointer-events: none;
width: 28px;
height: 28px;
margin: 1px;
font-size: 12px;
}spring
ばねの力学に基づいたイージングです。
easing: 'spring(mass, stiffness, damping, velocity)'ばねアニメーションの長さはspringパラメータで定義されます。durationパラメータは考慮されません。
| パラメータ | 初期値 | min | max |
|---|---|---|---|
| Mass(質量) | 1 | 0 | 100 |
| Stiffness(剛性) | 100 | 0 | 100 |
| Damping(減衰) | 10 | 0 | 100 |
| Velocity(速度) | 0 | 0 | 100 |
anime({
targets: '.spring-physics-demo .el',
translateX: 250,
direction: 'alternate',
loop: true,
easing: 'spring(1, 80, 10, 0)'
})デモ
JavaScript
var spring = anime({
targets: '#spring .el',
translateX: 250,
direction: 'alternate',
loop: true,
easing: 'spring(1, 80, 10, 0)'
})HTML
<div id="spring">
<div class="line">
<div class="square shadow"></div>
<div class="square el"></div>
</div>
</div>CSS
.shadow {
position: absolute;
opacity: .2;
}
.square {
pointer-events: none;
width: 28px;
height: 28px;
margin: 1px;
font-size: 12px;
}elastic
弾性イージング。
easing: 'easeOutElastic(amplitude, period)'| In | Out | In-Out |
|---|---|---|
'inElastic' | 'outElastic' | 'inOutElastic' |
| パラメータ | 初期値 | min | max | 内容 |
|---|---|---|---|---|
| Amplitude(振幅) | 1 | 1 | 10 | オーバーシュートする幅を指定します。 値が大きいほど大きくオーバーシュートします。 |
| Period(往復数) | .5 | 0.1 | 2 | 何度も往復する回数を指定します。 値が大きいほど揺れ幅が小さくなります。 |
anime({
targets: '.elastic-easing-demo .el',
translateX: 270,
easing: function(el) {
return el.getAttribute('data-ease');
},
duration: 1000
})デモ
要素をクリックするとアニメーションを開始します。
easeInElastic(1, .6)
easeOutElastic(1, .6)
easeInOutElastic(1, .6)
JavaScript
var elastic = anime({
targets: '#elastic .el',
translateX: 270,
easing: function(el) {
return el.getAttribute('data-ease');
},
duration: 1000
});HTML
<div id="elastic">
<div class="label small">easeInElastic(1, .6)</div>
<div class="square small shadow"></div>
<div class="square small el" data-ease="easeInElastic(1, .6)"></div>
<div class="label small">easeOutElastic(1, .6)</div>
<div class="square small shadow"></div>
<div class="square small el" data-ease="easeOutElastic(1, .6)"></div>
<div class="label small">easeInOutElastic(1, .6)</div>
<div class="square small shadow"></div>
<div class="square small el" data-ease="easeInOutElastic(1, .6)"></div>
</div>CSS
.shadow {
position: absolute;
opacity: .2;
}
.square {
pointer-events: none;
width: 28px;
height: 28px;
margin: 1px;
font-size: 12px;
}
.small {
width: 18px;
height: 18px;
}
.label {
position: absolute;
opacity: .5;
text-align: left;
padding-left: 38px;
}
.label.small {
line-height: 20px;
}steps
アニメーションの開始から終了までのステップ数を指定します。
easing: 'steps(numberOfSteps)'| パラメータ | 初期値 | min | max |
|---|---|---|---|
| ステップ数 | 10 | 1 | ∞ |
anime({
targets: '.step-easing-demo .el',
translateX: 250,
direction: 'alternate',
loop: true,
easing: 'steps(5)'
})デモ
JavaScript
var steps = anime({
targets: '#steps .el',
translateX: 250,
direction: 'alternate',
loop: true,
easing: 'steps(5)'
});HTML
<div id="spteps">
<div class="line">
<div class="square shadow"></div>
<div class="square el"></div>
</div>
</div>CSS
.shadow {
position: absolute;
opacity: .2;
}
.square {
pointer-events: none;
width: 28px;
height: 28px;
margin: 1px;
font-size: 12px;
}カスタムイージング
カスタムイージング関数は関数ベース値で返す必要があります。
easing: function() { return function(time) { return time * i} }| パラメータ | 内容 |
|---|---|
time | アニメーションの現在時刻を返します。 |
anime({
targets: '.custom-easing-demo .el',
translateX: 270,
direction: 'alternate',
loop: true,
duration: 2000,
easing: function(el, i, total) {
return function(t) {
return Math.pow(Math.sin(t * (i + 1)), total);
}
}
});デモ
JavaScript
var customEasing = anime({
targets: '#customEasing .el',
translateX: 270,
direction: 'alternate',
loop: true,
duration: 2000,
easing: function(el, i, total) {
return function(t) {
return Math.pow(Math.sin(t * (i + 1)), total);
}
}
});HTML
<div id="customEasing">
<div class="square small shadow"></div>
<div class="square small el"></div>
<div class="square small shadow"></div>
<div class="square small el"></div>
<div class="square small shadow"></div>
<div class="square small el"></div>
</div>CSS
.shadow {
position: absolute;
opacity: .2;
}
.square {
pointer-events: none;
width: 28px;
height: 28px;
margin: 1px;
font-size: 12px;
}
.small {
width: 18px;
height: 18px;
}MIT license. © 2017 Julian Garnier.
このコンテンツはJulian Garnier(juliangarnier)によるanime.jsドキュメントを翻訳/改変したものです。