Utilitaires✨ Premium

Like / Heart Button

Bouton « J'aime » en cœur : au clic, il passe au rouge, bat, lance cinq petits cœurs autour de lui et ajoute 1 au compteur ; un second clic retire le j'aime.

JSClickParticles

Mis à jour le

Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Utilitaires comprend 43 effets, dont 3 gratuits. Découvrir la catégorie →

3 exemples d'usage

Aimer une photo dans le fil d'une appli de photographie — Like / Heart Button exemple 1

① Aimer une photo dans le fil d'une appli de photographie

QuandEn faisant défiler son fil, l'abonné s'arrête sur un lever de soleil au-dessus d'un lac et touche le cœur sous l'image : il rougit, les petits cœurs jaillissent, 128 devient 129.
PourquoiC'est la place attendue d'un j'aime, juste sous la photo, à côté des commentaires ; l'éclat donne au geste un retour visible sans fenêtre ni message.
Réglages--lkh-size: 40px, --lkh-gap: 8px, --lkh-count-size: .95rem, compteur de départ 128, cadre de démo à zéro. Dans la capture, la scène clique le vrai bouton toutes les 1,3 s (j'aime, puis retrait).
Petits cœurs sous chaque commentaire d'un article — Like / Heart Button exemple 2

② Petits cœurs sous chaque commentaire d'un article

QuandSous un article sur les nouvelles lignes de car, chaque commentaire a son petit cœur et son total à droite ; le lecteur approuve le troisième, puis le premier.
PourquoiQuatre boutons indépendants dans une liste : chacun garde son total et son état, et l'éclat reste lisible même à 30 px.
RéglagesQuatre racines (totaux 14, 9, 3, 0) ; --lkh-size: 30px, --lkh-btn: #f1f2f5, --lkh-off: #6b6f80, --lkh-btn-on: #fde8e8, --lkh-on: #dc2626, --lkh-count-size: .8rem, --lkh-count-color: #4b5060 pour le fond blanc. La scène clique les commentaires 3 et 1 en alternance toutes les 0,9 s.
Vote du public pour un gâteau finaliste — Like / Heart Button exemple 3

③ Vote du public pour un gâteau finaliste

QuandPendant la finale d'un concours de pâtisserie, l'écran de vote montre l'entremets du candidat n° 3 et un très grand cœur : chaque spectateur le touche depuis son téléphone pour voter.
PourquoiÀ 96 px, le cœur est la seule action de l'écran ; le total en grand chiffre et l'éclat récompensent le vote. Un second toucher retire le vote du même spectateur, comme un j'aime.
Réglages--lkh-size: 96px, --lkh-gap: 18px, --lkh-btn: #2e1a24, --lkh-off: #c4a6b2, --lkh-count-size: 2.6rem, total de départ 348. Clic sur le vrai bouton toutes les 1,1 s dans la capture.

Comment ça marche

Le bouton est un vrai bouton bascule : aria-pressed passe à true au clic, à la touche Entrée ou Espace. Le cœur devient rouge (#ef4444), le fond du bouton rosit et le cœur bat (agrandi à 130 %, puis 90 %, puis 120 %, en 0,6 s). Au même moment, cinq petits cœurs partent vers le haut, chacun dans sa direction, rétrécissent et s'effacent en 0,6 s.

Les éclats sont lancés par la classe lkh-burst, que le script retire puis remet à chaque j'aime : l'éclat rejoue à chaque fois. Retirer son j'aime ne lance pas d'éclat.

Le compteur part du nombre écrit dans .lkh-num (42 dans le HTML d'exemple) : +1 au j'aime, −1 au retrait, jamais sous zéro. L'état de départ se lit dans aria-pressed, ce qui permet d'afficher un j'aime déjà donné. Chaque bascule envoie l'événement fx0742:change (detail.liked, detail.count) depuis la racine : c'est là que vous prévenez votre serveur. Toutes les tailles suivent --lkh-size.

Accessibilité

  • Nom et état : le bouton s'appelle « J'aime » (texte masqué à l'écran) et annonce « bouton bascule, activé / désactivé ». Les cœurs dessinés sont masqués aux lecteurs d'écran.
  • Total annoncé : le compteur est une zone aria-live="polite" ; après un clic, le lecteur d'écran dit « 43 mentions J'aime ».
  • Clavier : vrai <button>, Entrée et Espace, anneau lavande au focus clavier.
  • Contraste : le cœur éteint est en #8a8aa3, à 4,2:1 sur le bouton ; le cœur rouge fait environ 4:1 sur le fond rosé. L'état ne repose pas que sur la couleur : il est aussi dit par aria-pressed.
  • Mouvement réduit : ni battement ni éclats ; le cœur passe au rouge et le compteur change, sans animation.

Compatibilité navigateur

CSS et 1,5 Ko de JavaScript sans dépendance. Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 (Playwright) : code collé deux fois (chaque bouton compte seul), éclats invisibles au chargement puis visibles 120 ms après un clic (opacité 0,66 à 0,74), aucun éclat au retrait, clavier, toucher à 390 px, mouvement réduit, 0 erreur, aucun nom ajouté sur window.

Chrome 86+✓ Complet (mesuré)
Firefox 85+✓ Complet (mesuré)
Safari 15.4+✓ Complet (mesuré dans WebKit)
Edge 86+✓ Complet (moteur Chromium)
Mobile iOS 15.4+✓ Moteur WebKit, non vérifié sur appareil
Android Chrome 86+✓ Complet (toucher mesuré)

Sans JavaScript, le bouton reste gris et le compteur ne bouge pas. Les éclats utilisent des variables CSS dans @keyframes (Chrome 49, Firefox 31, Safari 9.1) ; l'anneau de focus demande :focus-visible (Chrome 86, Firefox 85, Safari 15.4).

Le code

Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :

index.html — structure
<div class="fx-0742-root">
  <div class="lkh-demo">
    <button type="button" class="lkh-btn" aria-pressed="false">
      <span class="lkh-heart" aria-hidden="true">❤</span>
      <span class="lkh-particles" aria-hidden="true">
        <span class="lkh-particle">❤</span> (× 5)
      </span>
      <span class="lkh-vh">J'aime</span>
    </button>
    <span class="lkh-count" aria-live="polite" aria-atomic="true"><span class="lkh-num">42</span><span class="lkh-vh"> mentions J'aime</span></span>
  </div>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
Total de départ (HTML — texte de .lkh-num) 42 Écrivez le vrai total venant de votre base ; seuls les chiffres sont lus.
Déjà aimé (HTML — aria-pressed="true" sur le bouton) false Affiche un j'aime déjà donné par ce visiteur.
Nom lu (HTML — texte de .lkh-vh) « J'aime » · « mentions J'aime » Adaptez : « Voter pour ce gâteau », « votes ».
Taille (CSS — --lkh-size, --lkh-gap) 60 px · 20 px Cœur, éclats et distances suivent la taille du bouton.
Couleurs (CSS — --lkh-btn, --lkh-btn-on, --lkh-off, --lkh-on) #2a2a3e · rouge à 10 % · #8a8aa3 · #ef4444 Fond du bouton au repos et aimé, cœur éteint et allumé (les éclats prennent la couleur allumée).
Compteur (CSS — --lkh-count-size, --lkh-count-color) 1.2rem · blanc À foncer sur fond clair.
Cadre (CSS — --lkh-height, --lkh-page, --lkh-panel, --lkh-pad) 300 px · #0a0a0f · #1a1a2e · 20 px 0 et transparent pour le poser sous une image ou dans une liste.
Serveur (JS — événement fx0742:change) — root.addEventListener('fx0742:change', e => fetch('/api/like', { method: 'POST', body: JSON.stringify(e.detail) })).

FAQ

Non, le bouton ne compte que sur la page. Écoutez fx0742:change pour envoyer le j'aime à votre serveur, et écrivez le total à jour dans .lkh-num quand vous générez la page.
Le cœur est le caractère ❤ suivi du sélecteur U+FE0E, qui demande le dessin « texte » : il prend alors la couleur du CSS. Quelques polices ou anciens systèmes l'ignorent et affichent leur émoji, qui garde sa couleur. Pour un rendu identique partout, mettez une icône SVG en cœur avec fill: currentColor à la place du caractère.
Le script lit seulement les chiffres (1 204 devient 1204) et réécrit le nombre sans séparateur. Pour un total formaté, remplacez String(count) par count.toLocaleString('fr-FR') dans le script.