animejs
Version:
JavaScript animation engine
86 lines (75 loc) • 2.71 kB
JavaScript
/**
* Anime.js - utils - ESM
* @version v4.3.6
* @license MIT
* @copyright 2026 - Julian Garnier
*/
import { lerp } from '../core/helpers.js';
export { clamp, round, snap } from '../core/helpers.js';
/**
* Rounds a number to fixed decimal places
* @param {Number|String} v - Value to round
* @param {Number} decimalLength - Number of decimal places
* @return {String}
*/
const roundPad = (v, decimalLength) => (+v).toFixed(decimalLength);
/**
* Pads the start of a value with a string
* @param {Number} v - Value to pad
* @param {Number} totalLength - Target length
* @param {String} padString - String to pad with
* @return {String}
*/
const padStart = (v, totalLength, padString) => `${v}`.padStart(totalLength, padString);
/**
* Pads the end of a value with a string
* @param {Number} v - Value to pad
* @param {Number} totalLength - Target length
* @param {String} padString - String to pad with
* @return {String}
*/
const padEnd = (v, totalLength, padString) => `${v}`.padEnd(totalLength, padString);
/**
* Wraps a value within a range
* @param {Number} v - Value to wrap
* @param {Number} min - Minimum boundary
* @param {Number} max - Maximum boundary
* @return {Number}
*/
const wrap = (v, min, max) => (((v - min) % (max - min) + (max - min)) % (max - min)) + min;
/**
* Maps a value from one range to another
* @param {Number} value - Input value
* @param {Number} inLow - Input range minimum
* @param {Number} inHigh - Input range maximum
* @param {Number} outLow - Output range minimum
* @param {Number} outHigh - Output range maximum
* @return {Number}
*/
const mapRange = (value, inLow, inHigh, outLow, outHigh) => outLow + ((value - inLow) / (inHigh - inLow)) * (outHigh - outLow);
/**
* Converts degrees to radians
* @param {Number} degrees - Angle in degrees
* @return {Number}
*/
const degToRad = degrees => degrees * Math.PI / 180;
/**
* Converts radians to degrees
* @param {Number} radians - Angle in radians
* @return {Number}
*/
const radToDeg = radians => radians * 180 / Math.PI;
/**
* Frame rate independent damped lerp
* Based on: https://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/
*
* @param {Number} start - Starting value
* @param {Number} end - Target value
* @param {Number} deltaTime - Delta time in ms
* @param {Number} factor - Interpolation factor in the range [0, 1]
* @return {Number} The interpolated value
*/
const damp = (start, end, deltaTime, factor) => {
return !factor ? start : factor === 1 ? end : lerp(start, end, 1 - Math.exp(-factor * deltaTime * .1));
};
export { damp, degToRad, lerp, mapRange, padEnd, padStart, radToDeg, roundPad, wrap };