react-native-reanimated
Version:
More powerful alternative to Animated library for React Native.
248 lines (237 loc) • 8.02 kB
JavaScript
'use strict';
import { withSpring, withTiming } from "../../animation/index.js";
import { assertEasingIsWorklet } from "../../animation/util.js";
import { BaseAnimationBuilder } from "./BaseAnimationBuilder.js";
export class ComplexAnimationBuilder extends BaseAnimationBuilder {
/**
* Lets you change the easing curve of the animation. Can be chained alongside
* other [layout animation
* modifiers](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#layout-animation-modifier).
*
* @param easingFunction - An easing function which defines the animation
* curve.
*/
static easing(easingFunction) {
const instance = this.createInstance();
return instance.easing(easingFunction);
}
easing(easingFunction) {
if (__DEV__) {
assertEasingIsWorklet(easingFunction);
}
this.easingV = easingFunction;
return this;
}
/**
* Lets you rotate the element. Can be chained alongside other [layout
* animation
* modifiers](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#layout-animation-modifier).
*
* @param degree - The rotation degree.
*/
static rotate(degree) {
const instance = this.createInstance();
return instance.rotate(degree);
}
rotate(degree) {
this.rotateV = degree;
return this;
}
/**
* Enables the spring-based animation configuration. Can be chained alongside
* other [layout animation
* modifiers](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#layout-animation-modifier).
*
* @param duration - An optional duration of the spring animation (in
* milliseconds).
*/
static springify(duration) {
const instance = this.createInstance();
return instance.springify(duration);
}
springify(duration) {
this.durationV = duration;
this.type = withSpring;
return this;
}
/**
* Lets you adjust the spring animation damping ratio. Can be chained
* alongside other [layout animation
* modifiers](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#layout-animation-modifier).
*
* @param dampingRatio - How damped the spring is.
*/
static dampingRatio(dampingRatio) {
const instance = this.createInstance();
return instance.dampingRatio(dampingRatio);
}
dampingRatio(value) {
this.dampingRatioV = value;
return this;
}
/**
* Lets you adjust the spring animation damping. Can be chained alongside
* other [layout animation
* modifiers](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#layout-animation-modifier).
*
* @param value - Decides how quickly a spring stops moving. Higher damping
* means the spring will come to rest faster.
*/
static damping(damping) {
const instance = this.createInstance();
return instance.damping(damping);
}
damping(damping) {
this.dampingV = damping;
return this;
}
/**
* Lets you adjust the spring animation mass. Can be chained alongside other
* [layout animation
* modifiers](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#layout-animation-modifier).
*
* @param mass - The weight of the spring. Reducing this value makes the
* animation faster.
*/
static mass(mass) {
const instance = this.createInstance();
return instance.mass(mass);
}
mass(mass) {
this.massV = mass;
return this;
}
/**
* Lets you adjust the stiffness of the spring animation. Can be chained
* alongside other [layout animation
* modifiers](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#layout-animation-modifier).
*
* @param stiffness - How bouncy the spring is.
*/
static stiffness(stiffness) {
const instance = this.createInstance();
return instance.stiffness(stiffness);
}
stiffness(stiffness) {
this.stiffnessV = stiffness;
return this;
}
/**
* Lets you adjust overshoot clamping of the spring. Can be chained alongside
* other [layout animation
* modifiers](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#layout-animation-modifier).
*
* @param overshootClamping - Whether a spring can bounce over the final
* position.
*/
static overshootClamping(overshootClamping) {
const instance = this.createInstance();
return instance.overshootClamping(overshootClamping);
}
overshootClamping(overshootClamping) {
this.overshootClampingV = overshootClamping;
return this;
}
/**
* Lets you adjust the rest displacement threshold of the spring animation.
* Can be chained alongside other [layout animation
* modifiers](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#layout-animation-modifier).
*
* @param restDisplacementThreshold - The displacement below which the spring
* will snap to the designated position without further oscillations.
*/
static restDisplacementThreshold(restDisplacementThreshold) {
const instance = this.createInstance();
return instance.restDisplacementThreshold(restDisplacementThreshold);
}
restDisplacementThreshold(restDisplacementThreshold) {
this.restDisplacementThresholdV = restDisplacementThreshold;
return this;
}
/**
* Lets you adjust the rest speed threshold of the spring animation. Can be
* chained alongside other [layout animation
* modifiers](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#layout-animation-modifier).
*
* @param restSpeedThreshold - The speed in pixels per second from which the
* spring will snap to the designated position without further
* oscillations.
*/
static restSpeedThreshold(restSpeedThreshold) {
const instance = this.createInstance();
return instance.restSpeedThreshold(restSpeedThreshold);
}
restSpeedThreshold(restSpeedThreshold) {
this.restSpeedThresholdV = restSpeedThreshold;
return this;
}
/**
* Lets you override the initial config of the animation
*
* @param values - An object containing the styles to override.
*/
static withInitialValues(values) {
const instance = this.createInstance();
return instance.withInitialValues(values);
}
withInitialValues(values) {
this.initialValues = values;
return this;
}
getAnimationAndConfig() {
const duration = this.durationV;
const easing = this.easingV;
const rotate = this.rotateV;
const type = this.type ? this.type : withTiming;
const damping = this.dampingV;
const dampingRatio = this.dampingRatioV;
const mass = this.massV;
const stiffness = this.stiffnessV;
const overshootClamping = this.overshootClampingV;
const restDisplacementThreshold = this.restDisplacementThresholdV;
const restSpeedThreshold = this.restSpeedThresholdV;
const animation = type;
const config = {};
function maybeSetConfigValue(value, variableName) {
if (value) {
config[variableName] = value;
}
}
if (type === withTiming) {
maybeSetConfigValue(easing, 'easing');
}
[{
variableName: 'damping',
value: damping
}, {
variableName: 'dampingRatio',
value: dampingRatio
}, {
variableName: 'mass',
value: mass
}, {
variableName: 'stiffness',
value: stiffness
}, {
variableName: 'overshootClamping',
value: overshootClamping
}, {
variableName: 'restDisplacementThreshold',
value: restDisplacementThreshold
}, {
variableName: 'restSpeedThreshold',
value: restSpeedThreshold
}, {
variableName: 'duration',
value: duration
}, {
variableName: 'rotate',
value: rotate
}].forEach(({
value,
variableName
}) => maybeSetConfigValue(value, variableName));
return [animation, config];
}
}
//# sourceMappingURL=ComplexAnimationBuilder.js.map