React + MotionBoutons

J’aime avec particules

Le cœur se remplit de couleur, fait un petit bond et lance un anneau de particules autour de lui.

Réglages

8

Code

import { useState } from "react";
import { AnimatePresence, motion } from "framer-motion";
import { Heart } from "lucide-react";

interface ParticleLikeButtonProps {
  color?: string;
  particles?: number;
}

export default function ParticleLikeButton({
  color = "#d25563",
  particles = 8,
}: ParticleLikeButtonProps) {
  const [liked, setLiked] = useState(false);

  return (
    <button
      type="button"
      aria-label="J’aime"
      aria-pressed={liked}
      onClick={() => setLiked((v) => !v)}
      className="relative grid h-14 w-14 place-items-center rounded-full bg-white dark:bg-[#1c1c1e] text-[#1d1d1f] dark:text-[#f5f5f7] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
    >
      <motion.span
        animate={{ scale: liked ? [1, 1.35, 1] : 1 }}
        transition={{ type: "spring", stiffness: 300, damping: 30 }}
      >
        <Heart
          className="h-6 w-6"
          fill={liked ? color : "transparent"}
          stroke={liked ? color : "currentColor"}
        />
      </motion.span>
      <AnimatePresence>
        {liked &&
          Array.from({ length: particles }, (_, i) => (
            <motion.i
              key={i}
              className="absolute h-1 w-1 rounded-full"
              style={{ backgroundColor: color }}
              initial={{ x: 0, y: 0, opacity: 1 }}
              animate={{
                x: Math.cos((i / particles) * Math.PI * 2) * 30,
                y: Math.sin((i / particles) * Math.PI * 2) * 30,
                opacity: 0,
              }}
              exit={{ opacity: 0 }}
              transition={{ duration: 0.55 }}
            />
          ))}
      </AnimatePresence>
    </button>
  );
}

Prompt pour l’IA

Collez-le dans ChatGPT, Claude ou Cursor : le bloc sera adapté à votre projet avec ces réglages, même sans React.

Plus dans Boutons

Où l’utiliser

Un « j’aime » doit être agréable à presser, sinon personne ne s’en sert. Ce cœur se remplit, sursaute et projette quelques points, comme sur les réseaux sociaux. Utilisez-le pour enregistrer une recette, mettre une annonce en favori ou réagir à une publication. Aussi petit soit-il, un bouton like animé est souvent l’élément le plus cliqué de la page.

Huit particules suffisent largement ; au-delà, on dirait des confettis. Si les cœurs ne collent pas à votre marque, remplacez le rouge par votre couleur. Un second appui retire le « j’aime », il fonctionne donc comme un vrai interrupteur.