damp() V4
A frame rate independent version of utils.lerp()
to performs a linear interpolation between two values.
The closer the amount is to 1
, the closer the result is to the end value.
const lerped = utils.lerp(start, end, deltaTime, amount);
Parameters
Name | Accepts |
---|---|
start | Number |
end | Number |
deltaTime | Number (ms) |
amount | Number [0-1] |
Returns
Number
utils.damp(0, 100, 8, 0); // 0
utils.damp(0, 100, 8, 0.5); // 50
utils.damp(0, 100, 8, 1); // 100
damp() code example
import { animate, createTimer, utils } from 'animejs';
const [ $input ] = utils.$('.input');
const [ $lerped ] = utils.$('.lerped');
const [ $lerped15fps ] = utils.$('.lerped-15');
animate($input, {
rotate: '1000turn',
modifier: utils.snap(.25),
duration: 4000000,
loop: true,
ease: 'linear',
});
const dampedLoop = createTimer({
frameRate: 15,
onUpdate: clock => {
const sourceRotate = utils.get($input, 'rotate', false);
const lerpedRotate = utils.get($lerped15fps, 'rotate', false);
utils.set($lerped15fps, {
rotate: utils.damp(lerpedRotate, sourceRotate, clock.deltaTime, .075) + 'turn'
});
}
});
const lerpedLoop = createTimer({
frameRate: 15,
onUpdate: () => {
const sourceRotate = utils.get($input, 'rotate', false);
const lerpedRotate = utils.get($lerped, 'rotate', false);
utils.set($lerped, {
rotate: utils.lerp(lerpedRotate, sourceRotate, .075) + 'turn'
});
}
});
<div class="x-large spaced-evenly row">
<div class="col">
<div class="clock input"></div>
<div class="label">input</div>
</div>
<div class="col">
<div class="clock lerped-15"></div>
<div class="label">damped 15fps</div>
</div>
<div class="col">
<div class="clock lerped"></div>
<div class="label">lerped 15fps</div>
</div>
</div>