UNPKG

@visactor/vrender-animate

Version:

This module provides a graph-based animation system for VRender.

64 lines (53 loc) 2.31 kB
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