Hover✨ Premium

Live Typing

Chaque touche de clavier fait surgir sa lettre en rotation dans une teinte différente — les 15 derniers caractères tapés s'affichent de gauche à droite et poussent les plus anciens hors du cadre, curseur clignotant inclus. Sous mouvement réduit, le mot « effect » s'affiche statique dès le chargement.

JSKeyboardAnimation

Mis à jour le

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

3 exemples d'usage

Affichage live sur un écran de scène — projection plein cadre pour un événement tech ou un meetup — Live Typing exemple 1

① Affichage live sur un écran de scène — projection plein cadre pour un événement tech ou un meetup

QuandLe présentateur tape sur son clavier et chaque lettre apparaît en grand (4,5 rem) avec l'animation pop sur l'écran de projection. L'audience voit les mots se former en direct.
PourquoiUn affichage live plein écran transforme la frappe en spectacle visuel : chaque lettre animée capte l'attention de l'audience et donne vie à une simple projection.
RéglagesFont-size 4,5 rem avec un poids de 900 ; couleurs dégradées du bleu au violet par position ; fond très sombre avec barre d'événement et badge LIVE. Pré-chargé via le code de scène pour la capture (dit dans la fiche).
Saisie de code PIN dans un formulaire d'accès sécurisé — champ stylisé dans une page d'authentification — Live Typing exemple 2

② Saisie de code PIN dans un formulaire d'accès sécurisé — champ stylisé dans une page d'authentification

QuandDans un formulaire de connexion, l'utilisateur doit saisir un code à 6 caractères. Chaque touche déclenche l'animation pop ; le code est pré-rempli avec des blocs neutres pour la démo.
PourquoiL'animation pop sur chaque caractère donne un retour visuel immédiat sans révéler le contenu du code : plus engageant qu'un champ masqué, sans sacrifier la discrétion.
RéglagesFont-size 1,6 rem ; espacement large (letter-spacing .12em) ; caractères affichés comme blocs colorés (▪) ; bordure indigo sur le conteneur ; hint '6 max' en superposition.
Zone de frappe d'un word sprint — défi de dactylographie avec chrono et statistiques live — Live Typing exemple 3

③ Zone de frappe d'un word sprint — défi de dactylographie avec chrono et statistiques live

QuandDans un défi de frappe chronométré, chaque mot tapé s'affiche dans la zone live avec l'animation pop. Les statistiques (mots, caractères, précision) se mettent à jour à chaque frappe.
PourquoiL'animation par lettre renforce le sentiment de progression et d'urgence dans un défi chronométré : chaque pop est un micro-reward qui incite à continuer.
RéglagesFont-size 2,4 rem ; couleurs par position (bleu → violet) ; zone entourée d'une bordure indigo ; stats en dessous avec barre de progression.

Comment ça marche

Le cadre .fx-0377-root écoute les événements keydown sur le document entier : n'importe quelle touche de caractère (un seul glyphe, e.key.length === 1) ajoute une entrée dans un tableau de 15 cases maximum ; Backspace en retire la dernière. À chaque frappe, le rendu vide la zone d'affichage .lt377-display et recrée un <span> par caractère avec une teinte calculée selon sa position (hsl(220 + i × 10, 70 %, 60 %)), de bleu au premier jusqu'à violet au quinzième, et un délai d'animation décalé de 50 ms entre chaque lettre.

L'animation lt377-pop agrandit chaque lettre à 1,3 puis la ramène à 1 en 0,4 s. Le curseur (div.lt377-cursor) clignote en boucle (lt377-blink, 0,7 s). Aucun état de départ n'est nécessaire : la zone est vide jusqu'à la première frappe, avec le seul curseur. L'effet n'utilise pas de requestAnimationFrame : il n'y a pas de boucle à arrêter hors écran.

Accessibilité

  • Lecteur d'écran : la zone d'affichage porte role="status" et aria-live="polite" ; chaque frappe annonce le caractère ajouté sans interrompre ce que le lecteur lisait. L'aria-label décrit la zone au premier focus.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, aucune animation ne démarre, le délai inter-lettres est supprimé et le mot « effect » s'affiche immédiatement au chargement avec le curseur statique — l'état de l'effet est lisible sans qu'une seule lettre n'ait à bouger.
  • Clavier uniquement : l'effet répond au clavier physique. Sur mobile, aucun équivalent tactile n'est prévu : il n'y a pas de champ texte déclenché au toucher. Si vos utilisateurs sont sur mobile, ajoutez un champ <input type="text"> masqué qui reçoit le focus au tap et déclenche l'événement input.
  • Focus et isolation : chaque copie n'écoute le clavier que lorsqu'elle a le focus. Cliquez sur la zone (ou Tab jusqu'à elle) pour l'activer — un contour indigo apparaît. Sur la même page, deux copies fonctionnent de façon indépendante : seule la zone active reçoit les frappes.

Compatibilité navigateur

Pur DOM et CSS, aucune dépendance. Fonctionne dans tous les navigateurs modernes dès que keydown, les animations CSS et querySelectorAll sont disponibles, soit depuis Chrome 4, Firefox 3.5 et Safari 4. window.matchMedia existe depuis Chrome 9, Firefox 6 et Safari 5.1. Aucune API expérimentale ni préfixée.

Chrome 9+✓ Complet
Firefox 6+✓ Complet
Safari 5.1+✓ Complet
Edge 12+✓ Complet
Mobile iOS✓ Partiel — clavier physique absent, effet non déclenché sans champ de saisie
Android Chrome✓ Partiel — même raison

Sans JavaScript, la zone d'affichage reste vide. Sans CSS animations, les lettres apparaissent directement sans rebond.

Le code

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

index.html — structure
<div class="fx-0377-root">
  <div class="lt377-display" role="status" aria-live="polite" aria-label="Affichage des touches tapées"></div>
  <span class="lt377-label" aria-hidden="true">Tapez sur votre clavier</span>
</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
Nombre maximal de caractères (JS — tableau de 15 cases) 15 Remplacez if(chars.length > 15) chars.shift() par la valeur souhaitée. 8 donne un résultat compact, 20 déborde sur les petits écrans sans ajuster la police.
Taille des lettres (CSS — .lt377-display span { font-size }) 2 rem Augmentez pour un affichage monumental en hero ; descendez à 1,2 rem pour un usage en ligne dans un paragraphe.
Palette de couleurs (JS — hsl(220 + i × 10, 70%, 60%)) bleu à violet, teinte de base 220, pas de 10° 220 → 0 donne rouge à bleu ; base 0, pas 15 donne rouge à orange. Pour une couleur fixe, remplacez par un code hexadécimal constant.
Durée de l'animation pop (CSS — @keyframes lt377-pop) 0,4 s 0,15 s donne un ressort très vif ; 0,8 s un rebond paresseux.
Fond (CSS — background de .fx-0377-root) #0a0a0f Passez à transparent pour intégrer l'effet à votre décor de page.

FAQ

Non, et c'est attendu. Sur mobile, le clavier système n'émet pas d'événements keydown tant qu'aucun champ n'a le focus. Pour déclencher l'effet au toucher, ajoutez un <input type="text" style="opacity:0;position:absolute"> dans la racine, donnez-lui le focus au tap sur le cadre, et écoutez l'événement input à la place de keydown.
Oui. L'écouteur keydown est posé sur la racine .fx-0377-root de chaque instance. Chaque copie ne réagit qu'aux frappes reçues quand elle a le focus (clic ou Tab). Sur la même page, deux zones fonctionnent de façon indépendante — seule la zone active se met à jour.
Pas directement. keydown ne se déclenche pas pour un collé (Ctrl+V génère un keydown sur « v » mais pas sur chaque lettre du texte collé). Pour une dictée ou un collé, écoutez l'événement input sur un champ caché et lisez event.data pour obtenir les nouveaux caractères.