Viewing File: /home/ubuntu/route-and-root-frontend-base/node_modules/@motionone/generators/lib/spring/index.js
import { time } from "@motionone/utils";
import { defaults } from "./defaults";
import { calcDampingRatio } from "./utils";
import { hasReachedTarget } from "../utils/has-reached-target";
import { calcGeneratorVelocity } from "../utils/velocity";
export const spring = ({ stiffness = defaults.stiffness, damping = defaults.damping, mass = defaults.mass, from = 0, to = 1, velocity = 0.0, restSpeed = 2, restDistance = 0.5, } = {}) => {
velocity = velocity ? time.s(velocity) : 0.0;
const state = {
done: false,
hasReachedTarget: false,
current: from,
target: to,
};
const initialDelta = to - from;
const undampedAngularFreq = Math.sqrt(stiffness / mass) / 1000;
const dampingRatio = calcDampingRatio(stiffness, damping, mass);
let resolveSpring;
if (dampingRatio < 1) {
const angularFreq = undampedAngularFreq * Math.sqrt(1 - dampingRatio * dampingRatio);
// Underdamped spring (bouncy)
resolveSpring = (t) => to -
Math.exp(-dampingRatio * undampedAngularFreq * t) *
(((-velocity + dampingRatio * undampedAngularFreq * initialDelta) /
angularFreq) *
Math.sin(angularFreq * t) +
initialDelta * Math.cos(angularFreq * t));
}
else {
// Critically damped spring
resolveSpring = (t) => {
return (to -
Math.exp(-undampedAngularFreq * t) *
(initialDelta + (-velocity + undampedAngularFreq * initialDelta) * t));
};
}
return (t) => {
state.current = resolveSpring(t);
const currentVelocity = t === 0
? velocity
: calcGeneratorVelocity(resolveSpring, t, state.current);
const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;
const isBelowDisplacementThreshold = Math.abs(to - state.current) <= restDistance;
state.done = isBelowVelocityThreshold && isBelowDisplacementThreshold;
state.hasReachedTarget = hasReachedTarget(from, to, state.current);
return state;
};
};
//# sourceMappingURL=index.js.map
Back to Directory
File Manager