withSpring
Starts a spring-based animation.
Arguments
toValue [number | string]
The target value at which the spring should settle.
It can be specified as a color value by providing string like: rgba(255, 105, 180, 0).
Currently supported formats are:
"rgb(r, g, b)""rgba(r, g, b, a)""hsl(h, s, l)""hsla(h, s, l, a)""#rgb""#rgba""#rrggbb""#rrggbbaa"
options [object]
Object carrying spring configuration. Allowed parameters are listed below:
| Options | Default | Description |
|---|---|---|
| damping | 10 | How hard the animation decelerates. |
| mass | 1 | The weight of the spring. Reducing this value makes the animation faster. |
| stiffness | 100 | How bouncy the animation is. |
| overshootClamping | false | Whether the animation can bounce over the specified value. |
| restDisplacementThreshold | 0.01 | The displacement below which the spring is considered to be at rest. |
| restSpeedThreshold | 2 | The speed in pixels per second from which the spring is considered to be at rest. |
callback [function](optional)
The provided function will be called when the animation is complete.
In case the animation is cancelled, the callback will receive false as the argument, otherwise it will receive true.
Returns
This method returns an animation object. It can be either assigned directly to a Shared Value or can be used as a value for a style object returned from useAnimatedStyle.
Example
import Animated, {
useSharedValue,
withSpring,
useAnimatedStyle,
useAnimatedGestureHandler,
} from 'react-native-reanimated';
import { PanGestureHandler } from 'react-native-gesture-handler';
function App() {
const x = useSharedValue(0);
const gestureHandler = useAnimatedGestureHandler({
onStart: (_, ctx) => {
ctx.startX = x.value;
},
onActive: (event, ctx) => {
x.value = ctx.startX + event.translationX;
},
onEnd: (_) => {
x.value = withSpring(0);
},
});
const animatedStyle = useAnimatedStyle(() => {
return {
transform: [
{
translateX: x.value,
},
],
};
});
return (
<PanGestureHandler onGestureEvent={gestureHandler}>
<Animated.View style={[styles.box, animatedStyle]} />
</PanGestureHandler>
);
}