react-native-animated-rolling-numbers
v1.0.3
Published
๐ The Animated Digits component for React Native seamlessly blends a sophisticated number rotation effect with dynamic value updates, creating an engaging and interactive experience that enhances your user interfaces with a touch of elegance and exciteme
Downloads
2,464
Maintainers
Readme
React Native Animated Rolling numbers
โจ react-native-animated-rolling-numbers
is a React Native component that animates numbers and compact notations (K, M, B, T) with customizable styles and animations. It's designed to create smooth, eye-catching transitions between numeric values.
The example shown in the video is available here.
Features
- โจ Supports animated transitions for numeric values and symbols (e.g., commas, dots).
- ๐จ Customizable digit styles and animation configurations.
- ๐ Handles compact number formatting (e.g., 1K, 1M, etc.).
- ๐ง Easily customizable via props.
- ๐ Supports reduce-motion and easing functions for animations.
- ๐ข Designed for both regular numbers and formatted numbers with signs (positive/negative) and commas.
Installation
npm install react-native-animated-rolling-numbers
# or
yarn add react-native-animated-rolling-numbers
Make sure you have react-native-reanimated
installed in your project. Follow the official installation guide here: react-native-reanimated installation.
Usage
Basic Example
import React, { useState } from "react";
import { View, StyleSheet, Button } from "react-native";
import { AnimatedRollingNumber } from "react-native-animated-rolling-numbers";
import { Easing } from "react-native-reanimated";
const App = () => {
const [value, setValue] = useState(1200);
return (
<View style={styles.container}>
<AnimatedRollingNumber
value={value}
showPlusSign
showMinusSign
useGrouping
enableCompactNotation
compactToFixed={2}
textStyle={styles.digits}
spinningAnimationConfig={{ duration: 500, easing: Easing.bounce }}
/>
<Button
onPress={() => setValue(value + Math.floor(Math.random() * 1000))}
title="Increase"
/>
<Button
onPress={() => setValue(value - Math.floor(Math.random() * 1000))}
title="Decrease"
/>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center",
},
digits: {
fontSize: 32,
fontWeight: "bold",
paddingHorizontal: 2,
color: "#4A90E2",
},
});
export default App;
The example shown in the video is available here.
Props
value: number
The numeric value to be displayed and animated.
showSign?: boolean
Whether to show the sign of the number (e.g., "+" or "-"). Defaults to false
.
showMinusSign?: boolean
Whether to show the minus sign for negative numbers. Defaults to true
.
showPlusSign?: boolean
Whether to show the plus sign for positive numbers. Defaults to false
.
toFixed?: number
Number of decimal places to show in normal notation. defaults to undefined
.
useGrouping?: boolean
Whether to include commas/points in the number formatting (e.g.,1000987 -> 1,000,987). Defaults to false
.
formattedText?: string
Custom formatted text to display instead of the numeric value.
locale?: Intl.LocalesArgument
The locale to use for number formatting. Defaults to "en-US"
.
enableCompactNotation?: boolean
Enable compact notation for large numbers (e.g., 1K, 1M, 1B, 1T). Defaults to false
.
compactToFixed?: number
Number of decimal places to show in compact notation. Defaults to undefined
.
fixedOnlyForCompact?: boolean
If true, only applies decimal precision for compact notation (K/M/B/T). Defaults to true
.
Example:
- If
fixedOnlyForCompact
istrue
andcompactToFixed
is2
, the number1500
will be displayed as1.50K
, but the number999
will be displayed as999
(no decimal places). - If
fixedOnlyForCompact
isfalse
andcompactToFixed
is2
, the number1500
will be displayed as1.50K
, and the number999
will be displayed as999.00
.
containerStyle?: StyleProp<ViewStyle>
Style for the container wrapping the animated digits.
digitContainerStyle?: StyleProp<ViewStyle>
Style for the container wrapping each animated digit.
textProps?: React.ComponentProps<typeof Text>
Props for the main text component.
numberTextProps?: React.ComponentProps<typeof Text>
Props for the numeric text components.
commaTextProps?: React.ComponentProps<typeof Text>
Props for the comma text component.
dotTextProps?: React.ComponentProps<typeof Text>
Props for the decimal point text component.
compactNotationTextProps?: React.ComponentProps<typeof Text>
Props for the compact notation text components (K, M, B, T).
signTextProps?: React.ComponentProps<typeof Text>
Props for the sign text component (if used).
textStyle?: StyleProp<TextStyle>
Style for the main text component.
numberStyle?: StyleProp<TextStyle>
Style for the numeric text components.
commaStyle?: StyleProp<TextStyle>
Style for the comma text component.
dotStyle?: StyleProp<TextStyle>
Style for the decimal point text component.
compactNotationStyle?: StyleProp<TextStyle>
Style for the compact notation text components.
signStyle?: StyleProp<TextStyle>
Style for the sign text component.
spinningAnimationConfig?: object
Configuration for the digit animation. Supports:
duration: number
: Duration of the animation in milliseconds.reduceMotion: boolean
: Whether to reduce motion for accessibility.easing: EasingFunction
: Custom easing function for the animation.
animationCallback?: AnimationCallback
Callback function that is invoked when the animation completes.
animateToNewValue?: (newValue: number, variant?: DigitVariant) => number
Custom function to animate the value change. Defaults to a bounce animation.
If you find this project useful and would like to support its ongoing development, consider buying me a coffee! Your support helps keep the creativity brewing and allows me to continue improving and maintaining this project. Thank you! โ๐