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ドキュメントを翻訳/改変したものです。