A confetti animation build using react-native-reanimated.
npm install @hikaaam/react-native-reanimated-confetti
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { useConfetti } from '@hikaaam/react-native-reanimated-confetti';
export default function App() {
const { RenderConfetti, startconfetti, isPlaying } = useConfetti();
return (
<View style={styles.container}>
<StatusBar style="auto" />
<RenderConfetti />
<TouchableOpacity onPress={startconfetti} disabled={isPlaying}>
<Text style={styles.text}>{isPlaying ? 'playing' : 'press me!'}</Text>
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
text: { color: '#000', fontSize: 16 },
});sample.mov
| Option | Type | Default | Description |
|---|---|---|---|
particlesAmount |
number | android:80,ios:200 | Number of confetti particles |
colors |
string[] | See source | Array of confetti colors |
duration |
number | 2000 | Animation duration (ms) |
You can pass options to useConfetti to customize the animation.
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { useConfetti } from './modules';
export default function App() {
const { RenderConfetti, startconfetti, isPlaying } = useConfetti({
duration: 3000,
colors: ['#a864fd', '#29cdff', '#78ff44', '#ff718d', '#fdff6a'],
particlesAmount: 300,
});
return (
<View style={styles.container}>
<StatusBar style="auto" />
<RenderConfetti
particleStyle={{
width: 5,
}}
/>
<TouchableOpacity onPress={startconfetti} disabled={isPlaying}>
<Text style={styles.text}>{isPlaying ? 'playing' : 'press me!'}</Text>
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
text: { color: '#000', fontSize: 16 },
});MIT