@visactor/vrender-animate
Version:
This module provides a graph-based animation system for VRender.
64 lines (53 loc) • 2.31 kB
JavaScript
import { AttributeUpdateType } from "@visactor/vrender-core/event/constant";
const animateUpdateContext = {
type: AttributeUpdateType.ANIMATE_UPDATE
}, animateBindContext = {
type: AttributeUpdateType.ANIMATE_BIND
}, animateStartContext = {
type: AttributeUpdateType.ANIMATE_START
};
function getAnimationContext(type) {
switch (type) {
case AttributeUpdateType.ANIMATE_UPDATE:
return animateUpdateContext;
case AttributeUpdateType.ANIMATE_BIND:
return animateBindContext;
case AttributeUpdateType.ANIMATE_START:
return animateStartContext;
default:
return {
type: type
};
}
}
function prepareAnimationFrameAttribute(target) {
const transientTarget = target;
return transientTarget.attribute || (transientTarget.attribute = {}), transientTarget.attribute === transientTarget.baseAttributes && transientTarget.detachAttributeFromBaseAttributes(),
transientTarget.attributeMayContainTransientAttrs = !0, transientTarget.attribute;
}
function commitAnimationFrameAttribute(target) {
target.onAttributeUpdate(animateUpdateContext);
}
export function applyAnimationFrameAttributes(target, attributes) {
if (!attributes) return;
const targetAttribute = prepareAnimationFrameAttribute(target);
for (const key in attributes) Object.prototype.hasOwnProperty.call(attributes, key) && (targetAttribute[key] = attributes[key]);
commitAnimationFrameAttribute(target);
}
export function applyAnimationFrameNumberAttributes(target, keys, from, to, ratio) {
const targetAttribute = prepareAnimationFrameAttribute(target);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
targetAttribute[key] = from[key] + (to[key] - from[key]) * ratio;
}
commitAnimationFrameAttribute(target);
}
export function applyAnimationTransientAttributes(target, attributes, type = AttributeUpdateType.ANIMATE_UPDATE) {
if (!attributes) return;
const context = getAnimationContext(type);
target.applyAnimationTransientAttributes(attributes, !1, context);
}
export function applyAppearStartAttributes(target, attributes) {
applyAnimationTransientAttributes(target, attributes, AttributeUpdateType.ANIMATE_BIND);
}
//# sourceMappingURL=transient.js.map