UNPKG

animejs

Version:

JavaScript animation engine

73 lines (65 loc) 2.37 kB
/** * Anime.js - timeline - 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 values = require('../core/values.cjs'); /** * @import { * Tickable, * TimelinePosition, * } from '../types/index.js' */ /** * @import { * Timeline, * } from './timeline.js' */ /** * Timeline's children offsets positions parser * @param {Timeline} timeline * @param {String} timePosition * @return {Number} */ const getPrevChildOffset = (timeline, timePosition) => { if (helpers.stringStartsWith(timePosition, '<')) { const goToPrevAnimationOffset = timePosition[1] === '<'; const prevAnimation = /** @type {Tickable} */(timeline._tail); const prevOffset = prevAnimation ? prevAnimation._offset + prevAnimation._delay : 0; return goToPrevAnimationOffset ? prevOffset : prevOffset + prevAnimation.duration; } }; /** * @param {Timeline} timeline * @param {TimelinePosition} [timePosition] * @return {Number} */ const parseTimelinePosition = (timeline, timePosition) => { let tlDuration = timeline.iterationDuration; if (tlDuration === consts.minValue) tlDuration = 0; if (helpers.isUnd(timePosition)) return tlDuration; if (helpers.isNum(+timePosition)) return +timePosition; const timePosStr = /** @type {String} */(timePosition); const tlLabels = timeline ? timeline.labels : null; const hasLabels = !helpers.isNil(tlLabels); const prevOffset = getPrevChildOffset(timeline, timePosStr); const hasSibling = !helpers.isUnd(prevOffset); const matchedRelativeOperator = consts.relativeValuesExecRgx.exec(timePosStr); if (matchedRelativeOperator) { const fullOperator = matchedRelativeOperator[0]; const split = timePosStr.split(fullOperator); const labelOffset = hasLabels && split[0] ? tlLabels[split[0]] : tlDuration; const parsedOffset = hasSibling ? prevOffset : hasLabels ? labelOffset : tlDuration; const parsedNumericalOffset = +split[1]; return values.getRelativeValue(parsedOffset, parsedNumericalOffset, fullOperator[0]); } else { return hasSibling ? prevOffset : hasLabels ? !helpers.isUnd(tlLabels[timePosStr]) ? tlLabels[timePosStr] : tlDuration : tlDuration; } }; exports.parseTimelinePosition = parseTimelinePosition;