Infinity
Animated infinity icon
Use the Infinity icon for infinite scroll and load-more indicators: it loops continuously and takes 4 s. Looping icons typically show loading spinners, active alerts, a ringing bell or a scroll-down hint.
Free under the MIT license · Markdown version · About the files
Use it
npm install react-useanimationsimport UseAnimations from 'react-useanimations';
import infinity from 'react-useanimations/lib/infinity';
<UseAnimations animation={infinity} size={32} />npx shadcn@latest add https://useanimations.com/r/infinity.jsonimport { AnimatedInfinity } from '@/components/animations/infinity';
<AnimatedInfinity size={24} /><div id="infinity-icon" style="width: 48px; height: 48px"></div>
<script src="https://cdn.jsdelivr.net/npm/lottie-web@5.13.0/build/player/lottie_light.min.js"></script>
<script>
const el = document.getElementById('infinity-icon');
const a = lottie.loadAnimation({ container: el, renderer: 'svg', loop: true, autoplay: false, path: 'https://useanimations.com/icons/infinity.json' });
const motion = matchMedia('(prefers-reduced-motion: reduce)');
a.addEventListener('DOMLoaded', () => { a.goToAndStop(0, true); if (!motion.matches) a.play(); });
motion.addEventListener('change', (event) => { if (event.matches) a.goToAndStop(0, true); else a.play(); });
</script>Infinity runs on the light build, lottie_light.min.js.
import LottieView from 'lottie-react-native';
<LottieView source={{ uri: 'https://useanimations.com/icons/infinity.json' }} autoPlay loop style={{ width: 48, height: 48 }} />import Lottie
LottieView {
await LottieAnimation.loadedFrom(url: URL(string: "https://useanimations.com/icons/infinity.json")!)
}
.playing(loopMode: .loop)
.frame(width: 48, height: 48)val composition by rememberLottieComposition(LottieCompositionSpec.Url("https://useanimations.com/icons/infinity.json"))
LottieAnimation(composition, iterations = LottieConstants.IterateForever, modifier = Modifier.size(48.dp))import 'package:lottie/lottie.dart';
Lottie.network('https://useanimations.com/icons/infinity.json', width: 48, height: 48, repeat: true)Bundle infinity.json with the app to use it offline.
<img src="https://useanimations.com/icons/infinity/infinity.svg" alt="Infinity" width="24" height="24" />Inside <img> the SVG draws black; inline it to follow the text color.
Static SVG
Questions about the Infinity icon
›Can I pause the Infinity loop?
It pauses by itself while scrolled out of view and stays on its first frame when reduced motion is preferred or autoplay={false} is set. To show it only while something is pending, render it conditionally.
›How do screen readers announce the Infinity loader?
They don't unless you pass aria-label="Loading…", which gives it role="img". Often better: keep it hidden and set aria-busy="true" on the region that is loading.
›Can Infinity loop only while hovered instead?
Yes: pass interaction="hover-loop". It then loops while hovered, finishes the current cycle after mouseleave and stays static when reduced motion is preferred.