1.1.4-beta • Published 1 year ago

fk-animation-wrapper-view v1.1.4-beta

Weekly downloads
-
License
ISC
Repository
github
Last release
1 year ago

AnimationWrapperView is a collection of a well defined set of component level animations, that a developer can utilize just by providing some configurations. AnimationWrapperView will add plug and play type support to the already robust Animated API, and will take care of all the intricate details of each animation type.

Features

  • Power animation payload from anywhere (backend ? 😉)
  • Extremely light-weight (4KB gzipped + minified).
  • Out-of-box support for iOS, Android and RNW.
  • Great selection of well defined animations.
  • Declarative transformation animations with JSON.
  • Imperative controls to the animation state. (start/pause/reset)

Snack Playground

https://snack.expo.dev/@swapnil1104/animationwrapperview-playground

Steps to integrate

npm install animation-wrapper-view

Sample code

const bounceConfig: BounceAnimation = {
    type: AnimationType.BOUNCE,
    triggerType: AnimationTriggerType.ON_CLICK,
    bounceHeight: 20,
    animationDuration: 1000
};

<AnimationWrapperView animationConfig={bounceConfig}>
    {/* {your component} */}
</AnimationWrapperView>

AnimationWrapperView capabilities

Start, Pause and Reset Animation

private _wrapperRef: AnimationWrapperView | null;

render() {
    return (
        <AnimationWrapperView
            ref={(ref) => (this._wrapperRef = ref)}
            animationConfig={this.state.animationConfig}
            onAnimationFinish={this._onComplete}>
                {your component}
        </AnimationWrapperView>
    );
}

// Start animation from the view ref.
private _onPressToStart = (_: GestureResponderEvent) => {
    this._wrapperRef?.startAnimation();
}

// Pause animation from the view ref.
private _onPressToPause = (_: GestureResponderEvent) => {
    this._wrapperRef?.pauseAnimation();
}

// Reset animation from the view ref.
private _onPressToReset = (_: GestureResponderEvent) => {
    this._wrapperRef?.resetAnimation();
}

AnimationWrapperView props

Prop nameProp TypeDescription
animationConfigBaseAnimationObject which will contain all optional and non-optional parameters needed to render the animation, including AnimationType, AnimationTriggerType, etc.
onAnimationFinish() => void(optional) Callback function, if provided will be invoked once animation is finished.
onAnimationStart() => void(optional) Callback function, if provided will be invoked when the animation is triggered.

Types of supported Animations

Predefined Animations

JSON Based custom Animations

Different types of animation configs

To note, all the AnimationConfig objects extend from, so animationDuration, triggerType, triggerDelay, and interpolation properties are available to each of the animation definitions.

AnimationConfigProperty nameTypeDescriptionDemo
BaseAnimationConfigtypeAnimationTypeAnimationType enum will determine which type of animation will be rendered
triggerTypeAnimationTriggerTypeAnimationTriggerType enum defines the trigger critera of animation invokation; ON_LOAD, ON_CLICK
interpolationInterpolationDefInterpolationDef defines the property related to interpolation that will be applied to the animation timing function.
triggerDelaynumberThis controls the animation trigger for ON_LOAD animation, it'll introduce delay before the animation is started
animationDurationnumberThis defines how long the animation will be played before stopping.
BounceAnimationConfigbounceHeightnumberThis param defines the value of Y axis translation which will give the visual appearance of the view bouncing.Bounce
FadeAnimationConfiginitialOpacitynumberThis will define the initial opacity of the view when the Animation starts playingFae Out
finalOpacitynumberThis will define the final opacity of the view once animation endsFade In
RippleAnimationConfigrippleColorstringThis will define the ripple color, the input value could be a supported color name, or a hexcode value.Ripple
rippleCountnumberThis determines how many ripples will be shown before animation ends
rippleDurationnumberThis determines for how long an individual ripple will animate.
rippleIntervalDurationnumberThis determines the time duration interval between each ripple.
rippleRadiusnumberThis will define the size of the ripple in its fully expanded state.
ScaleAnimationConfigfromScalenumberThis will define the initial scale of the view before animation starts.Scale In
toScalenumberThis will define the final scaale of the view once animation ends.Scale out
SlideHorizontalAnimationConfiginitialOffsetnumberThis will define the initial offset from the view's original position before starting the animation.Slide in
finalOffsetnumberThis will define the final offset of the view once animation ends, 0 value will lead the view back to its original position.Slide out
directionSlideHorizontalDirectionThe direction param in this case will define the slide direction; 'ltr': left to right, or 'rtl': Right to left
SlideVerticalAnimationConfiginitialOffsetnumberThis will define the initial offset from the view's original position before starting the animation.
finalOffsetnumberThis will define the final offset of the view once animation ends, 0 value will lead the view back to its original position.
directionSlideVerticalDirectionThe direction param in this case will define the slide direction; 'up_down': top to down, or 'down_up': below the view to upwards.
DraggableAnimationConfigTBDTBDTBD

In Action

Demore

Define your custom animations!

AnimationWrapperView also gives you the capability to define your custom animation using JSON. This tool is very powerful as it allows you to play with various transformation attributes that can be applied to any Animated.View.

  • A TransformDef object defines an individual piece of transformation, f(from) to t(to) value and the p(property) to transform.
  • An array of TransformDef along with the duration and the InterpolationDef will create an AnimationDef object. All the transformations defined in the array will play in parallel.
  • An array of AnimationDef definitions can be played in sequence to render any type of animation (limited by imagination :P).

Type definitions:

Type nameparamsusage
TransformDefproperty: TransformTypeDefines the property to transform: scale, fade, opacity, translateY, rotate, translateX, rotateX, rotateY , scaleX, scaleY
to:numberThe starting value of the transformation
from:numberThe final value of transformation after animation
Type nameparamsusage
InterpolationDefeasing: EasingTypeDefines the easing that will be applied to the transformation set: linear, quad, circle, elastic, bounce, back.
params: InterpolationParamsSome easing functions require extra params, we use this object to populate the optional params for easing functions, please note if a non optional param is not provided for the specified easing function, it will fallback to linear easing.
Type nameparamsusage
InterpolationParamsback: numberhttps://reactnative.dev/docs/easing#back
bounciness: numberhttps://reactnative.dev/docs/easing#bounce
bezierCurvePoints: Array<x1: number, y1: number, x2: number, y2: number>https://cubic-bezier.com/
Type nameparamsusage
AnimationDefTransformDef[]An array of transformation functions can be defined, that will be applied to the object in parallel
durationDuration in which the set of transformations complete animating.
InterpolationDefThis param will describe the easing function that will be applied to this set of transformations.

Multiple set of transformations can be played in a sequence.

Usage of JSON based custom animation

const animationConfig: JsonAnimationConfig = {
        type: AnimationType.JSON,
        triggerType: AnimationTriggerType.ON_LOAD,
        animationConfig: {
            transforms: [
                {
                    key: 'scale',
                    from: 0,
                    to: 1,
                },
                {
                    key: 'rotate',
                    from: 0,
                    to: 90,
                },
                {
                    key: 'rotateX',
                    from: 0,
                    to: 180,
                }
            ],
            duration: 1000,
            interpolation: {
                easing: "linear"
            }
        }
    };
<AnimationWrapperView animationConfig={bounceConfig}>
    {/* {your component} */}
</AnimationWrapperView>

Json Animation Demo Json Animation Demo