Orbit Component
This interactive component displays elements orbiting around a central point on the screen, simulating a solar system. Using the Orbit
component in your application, you can adjust the radius
prop to control the distance of the orbit.
Decrypt
Usage
To use the Orbit
component in your project, simply import it and set the radius
prop as shown below:
import Orbit from "./components/Orbit";
function MyApp() {
return <Orbit />;
}
Source Code
To implement the orbital animation, update your tailwind.config.js
as follows:
theme: {
extend: {
animation: {
orbit: "orbit calc(var(--duration)*1s) linear infinite",
},
keyframes: {
orbit: {
"0%": {
transform: "rotate(0deg) translateY(calc(var(--radius) * 1px)) rotate(0deg)",
},
"100%": {
transform: "rotate(360deg) translateY(calc(var(--radius) * 1px)) rotate(-360deg)",
},
},
},
},
},
Then, create the Orbit
component in @/app/components/Orbit.tsx
with the following structure:
"use client";
export default function Orbit({
className,
children,
reverse,
duration = 20,
delay = 10,
radius = 50,
path = true,
}: {
className?: string;
children?: React.ReactNode;
reverse?: boolean;
duration?: number;
delay?: number;
radius?: number;
path?: boolean;
}) {
return (
<>
{path && (
<svg
xmlns="http://www.w3.org/2000/svg"
version="1.1"
className="pointer-events-none absolute inset-0 h-full w-full"
>
<title>Orbiting Circles</title>
<circle
className="stroke-zinc-500/25 stroke-1"
cx="50%"
cy="50%"
r={radius}
fill="none"
strokeDasharray={"4 4"}
/>
</svg>
)}
<div
style={
{
"--duration": duration,
"--radius": radius,
"--delay": -delay,
} as React.CSSProperties
}
className={`absolute flex h-full w-full transform-gpu animate-orbit items-center justify-center rounded-full border bg-black/10 [animation-delay:calc(var(--delay)*1000ms)] dark:bg-white/10 ${
reverse ? "[animation-direction:reverse]" : ""
} ${className}`}
>
{children}
</div>
</>
);
}
Props
Prop | Type | Description | Default |
---|---|---|---|
className | string | The class name for the component | "" |
children | React.ReactNode | The children nodes of the component | null |
reverse | boolean | If true, the animation plays in reverse | false |
duration | number | The duration of the animation in seconds | 20 |
delay | number | The delay before the animation starts in seconds | 10 |
radius | number | The radius of the orbit in pixels | 50 |