UNPKG

animejs

Version:

JavaScript animation engine

83 lines (75 loc) 2.36 kB
/** * Anime.js - animation - CJS * @version v4.3.6 * @license MIT * @copyright 2026 - Julian Garnier */ 'use strict'; var consts = require('../core/consts.cjs'); var helpers = require('../core/helpers.cjs'); var render = require('../core/render.cjs'); const additive = { animation: null, update: consts.noop, }; /** * @import { * Tween, * TweenAdditiveLookups, * } from '../types/index.js' */ /** * @typedef AdditiveAnimation * @property {Number} duration * @property {Number} _offset * @property {Number} _delay * @property {Tween} _head * @property {Tween} _tail */ /** * @param {TweenAdditiveLookups} lookups * @return {AdditiveAnimation} */ const addAdditiveAnimation = lookups => { let animation = additive.animation; if (!animation) { animation = { duration: consts.minValue, computeDeltaTime: consts.noop, _offset: 0, _delay: 0, _head: null, _tail: null, }; additive.animation = animation; additive.update = () => { lookups.forEach(propertyAnimation => { for (let propertyName in propertyAnimation) { const tweens = propertyAnimation[propertyName]; const lookupTween = tweens._head; if (lookupTween) { const valueType = lookupTween._valueType; const additiveValues = valueType === consts.valueTypes.COMPLEX || valueType === consts.valueTypes.COLOR ? helpers.cloneArray(lookupTween._fromNumbers) : null; let additiveValue = lookupTween._fromNumber; let tween = tweens._tail; while (tween && tween !== lookupTween) { if (additiveValues) { for (let i = 0, l = tween._numbers.length; i < l; i++) additiveValues[i] += tween._numbers[i]; } else { additiveValue += tween._number; } tween = tween._prevAdd; } lookupTween._toNumber = additiveValue; lookupTween._toNumbers = additiveValues; } } }); // TODO: Avoid polymorphism here, idealy the additive animation should be a regular animation with a higher priority in the render loop render.render(animation, 1, 1, 0, consts.tickModes.FORCE); }; } return animation; }; exports.addAdditiveAnimation = addAdditiveAnimation; exports.additive = additive;