UNPKG

animejs

Version:

JavaScript animation engine

86 lines (75 loc) 2.71 kB
/** * 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 };