32 lines
1.1 KiB
JavaScript
32 lines
1.1 KiB
JavaScript
|
import { getEasingForSegment } from '../../../easing/utils/get-easing-for-segment.mjs';
|
||
|
import { removeItem } from '../../../utils/array.mjs';
|
||
|
import { mix } from '../../../utils/mix.mjs';
|
||
|
|
||
|
function eraseKeyframes(sequence, startTime, endTime) {
|
||
|
for (let i = 0; i < sequence.length; i++) {
|
||
|
const keyframe = sequence[i];
|
||
|
if (keyframe.at > startTime && keyframe.at < endTime) {
|
||
|
removeItem(sequence, keyframe);
|
||
|
// If we remove this item we have to push the pointer back one
|
||
|
i--;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
function addKeyframes(sequence, keyframes, easing, offset, startTime, endTime) {
|
||
|
/**
|
||
|
* Erase every existing value between currentTime and targetTime,
|
||
|
* this will essentially splice this timeline into any currently
|
||
|
* defined ones.
|
||
|
*/
|
||
|
eraseKeyframes(sequence, startTime, endTime);
|
||
|
for (let i = 0; i < keyframes.length; i++) {
|
||
|
sequence.push({
|
||
|
value: keyframes[i],
|
||
|
at: mix(startTime, endTime, offset[i]),
|
||
|
easing: getEasingForSegment(easing, i),
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export { addKeyframes, eraseKeyframes };
|