Docs
Slider Button
Slider Button
A stylish button with sliding text and arrow animation
Installation
Copy and paste the following code into your project.
"use client"
import { useState } from "react"
import { ArrowRight } from "lucide-react"
import { Button } from "@/components/ui/button"
export function SliderButton({
name1,
name2,
onClick,
}: {
name1: string
name2: string
onClick: () => void
}) {
const [isHovered, setIsHovered] = useState(false)
return (
<Button
className="relative overflow-hidden bg-background text-foreground hover:text-white border-2 border-primary px-6 py-3 rounded-md transition-all duration-300 ease-in-out group"
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
>
<span className="relative z-10 flex items-center transition-transform duration-300 ease-in-out group-hover:-translate-x-5">
<span
className={`transition-opacity duration-300 ${
isHovered ? "opacity-0" : "opacity-100"
}`}
>
{name1}
</span>
<span
className={`absolute left-0 transition-opacity duration-300 ${
isHovered ? "opacity-100" : "opacity-0"
}`}
>
{name2}
</span>
<ArrowRight className="ml-2 h-5 w-5 transition-transform duration-300 group-hover:translate-x-5" />
</span>
<span className="absolute bottom-0 left-0 h-[2px] w-full bg-primary transform origin-left transition-transform duration-300 ease-out scale-x-0 group-hover:scale-x-100" />
</Button>
)
}
Update the import paths to match your project setup.
Usage
import SliderButton from "@/components/ui/slider-button"
export default function SliderButtonDemo() {
return (
<div className="w-full max-w-4xl">
<div className="p-2">
<h3 className="text-xl font-semibold">SliderButton</h3>
</div>
<div className="min-h-[200px] p-4 flex flex-col justify-center items-center border border-dashed rounded-lg space-y-4">
<SliderButton
name1="Discover More"
name2="Let's Go"
onClick={() => console.log('Button clicked')}
/>
</div>
</div>
)
}