Texte✨ Premium

Scramble Text

Un setInterval à 30 ms remplace chaque caractère par un symbole aléatoire parmi 42, puis les révèle de gauche à droite au rythme d'un tiers de position par tick — l'effet décodeur se déclenche au survol.

JSDecoderMatrix

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Texte comprend 56 effets, dont 4 gratuits. Découvrir la catégorie →

3 exemples d'usage

Page d'accueil sombre — Nom de code qui se déchiffre — Scramble Text exemple 1

① Page d'accueil sombre — Nom de code qui se déchiffre

QuandLe visiteur arrive sur une landing page à l'esthétique cyber ou terminal : le grand titre révèle son identité au premier survol.
PourquoiL'effet de décodeur progressif crée une tension narrative — le nom reste mystérieux une fraction de seconde avant d'être révélé, parfait pour une marque tech ou un produit à forte identité.
RéglagesTexte en majuscules courtes (5–8 chars), font-size 3–5 rem, intervalle à 30 ms, iterations += 1/3 — révélation en ≈ 600 ms pour 6 lettres.
Menu de navigation terminal — Liens qui scramblent au survol — Scramble Text exemple 2

② Menu de navigation terminal — Liens qui scramblent au survol

QuandDans une UI dark (tableau de bord, outil pro, IDE en ligne), les items de navigation horizontale ou verticale scramblent quand la souris les survole.
PourquoiLe scramble sur un mot court (HOME, DOCS, API) dure moins de 300 ms — assez pour percevoir l'animation sans gêner la navigation. Renforce l'identité « ligne de commande » sans ralentir l'UX.
RéglagesTexte court (4–6 chars), intervalle à 30 ms, iterations += 1/2 (60 ms/char) pour une révélation plus vive ; couleur adaptée à votre palette nav.
Interface de jeu — Nom de joueur ou code de mission révélé — Scramble Text exemple 3

③ Interface de jeu — Nom de joueur ou code de mission révélé

QuandDans un écran de debriefing ou de résultats (FPS, stratégie, quiz), le nom de code ou le callsign de l'équipe se décode sous les yeux du joueur.
PourquoiLa séquence de symboles aléatoires (0–9, @#$) évoque instantanément le jargon hacker et les films d'espionnage — porteur de sens dans un contexte jeu sans avoir besoin d'explication.
RéglagesTexte majuscule (6–10 chars), intervalle à 40 ms pour un décodage plus lent et dramatique, iterations += 1/4 (120 ms/char), déclenché sur DOMContentLoaded plutôt que sur hover.

Comment ça marche

Au mouseenter, un setInterval se lance toutes les 30 ms. À chaque tick, le contenu textuel entier est reconstruit : les positions d'index inférieur à iterations restituent le caractère original, les suivantes tirent aléatoirement parmi 42 symboles (A–Z, 0–9, @#$%&*). Le résultat est réaffecté d'un coup via textContent — pas de manipulation char par char du DOM.

iterations progresse de 1/3 par tick : chaque position reste brouillée environ trois ticks (≈ 90 ms) avant d'être figée sur le bon caractère. La révélation avance strictement de gauche à droite — l'œil perçoit un décodeur progressif plutôt qu'un simple bruit aléatoire.

L'intervalle s'arrête dès que iterations >= originalText.length (tous les caractères révélés). Sur mouseleave, clearInterval vide l'intervalle en cours et textContent est restauré instantanément à la valeur originale — aucune animation de sortie.

L'élément cible porte la police "Courier New", monospace : largeur de glyphe fixe quel que soit le symbole, zéro saut de mise en page pendant le remplacement. La couleur indigo #6366f1 renforce la connotation terminal/système.

Accessibilité

  • prefers-reduced-motion : absent du code — l'effet se lance même si l'OS demande des animations réduites. Ajoutez if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; en tête du gestionnaire mouseenter pour désactiver le scramble.
  • Pas de déclenchement clavier : l'effet est lié à mouseenter/mouseleave uniquement — les utilisateurs navigant au clavier ne voient pas l'animation. Recommandation : dupliquer les mêmes handlers sur focus/blur.
  • La mise à jour répétée de textContent peut être annoncée par certains lecteurs d'écran à chaque tick. Recommandation : ajouter aria-hidden="true" sur l'élément scramblé et un <span class="sr-only"> avec le texte statique hors flux.
  • Le texte original reste lisible avant le survol et est restauré immédiatement sur mouseleave — aucun état bloqué.
  • La police monospace garantit une largeur de ligne stable pendant le scramble : pas de recalcul de layout, pas de décalage de contenu adjacent.

Compatibilité navigateur

Nécessite setInterval et textContent — supportés dans tous les navigateurs depuis 2010. Zéro dépendance externe.

Chrome 100+✓ Complet
Firefox 100+✓ Complet
Safari 15+✓ Complet
Edge 100+✓ Complet
Mobile iOS✓ Pas de hover natif — déclenchez sur tap via touchstart
Android Chrome✓ Identique iOS — tap requis

Sans JS, le texte reste statique, stylé en monospace indigo — rendu cohérent, aucune erreur fatale.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="demo-preview">
  <span class="demo-text splitting-text-scramble" id="scrambleTextHover">VOTRE TEXTE</span>
  <!-- Optionnel : bouton Replay -->
  <button class="replay-btn" onclick="replayScramble()">Replay</button>
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

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

Option / propriétéDéfautEffet
chars (JS, ligne 7) 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%&*' Jeu de 42 symboles de remplacement. Réduisez à 'ABCDEF0123456789' pour un rendu hexadécimal, ou '!@#$%^&*' pour un ton plus agressif.
setInterval (JS, ligne 14) 30 Délai en ms entre deux ticks. 20 ms = décodeur ultra-rapide ; 60 ms = déchiffrement lent et dramatique.
iterations += (JS, ligne 22) 1/3 Pas de révélation par tick. 1/3 → 3 ticks/char (~90 ms/char) ; 1/2 → ~60 ms/char (vif) ; 1/6 → ~180 ms/char (lent).
color (.splitting-text-scramble) #6366f1 Couleur du texte scramblé (et de l'état final). Remplacez par votre couleur brand.
font-family (.splitting-text-scramble) "Courier New", monospace Police monospace obligatoire pour éviter le saut de largeur. Remplacez par 'JetBrains Mono', 'Fira Code' ou toute police monospace installée.
font-size (.demo-text) 2.5rem Taille du texte. Plus le texte est grand, plus l'effet est visible ; adaptez à votre hiérarchie typographique.

FAQ

Le JS cible getElementById('scrambleTextHover'). Si votre span a un id différent (par ex. id="scrambleText"), ajoutez id="scrambleTextHover" à votre élément ou modifiez la ligne getElementById pour pointer vers votre id réel.
Remplacez le listener mouseenter par un appel direct après initialisation : supprimez le bloc addEventListener('mouseenter', ...) et placez son contenu (le setInterval) directement dans l'IIFE, après la déclaration de scrambleInterval. Le bouton Replay peut alors redéclencher via scrambleEl.dispatchEvent(new Event('mouseenter')).
Le JS hardcode un seul id. Pour plusieurs cibles, remplacez getElementById par querySelectorAll('.splitting-text-scramble') et initialisez chaque élément dans une boucle — chacun a besoin de son propre scrambleInterval et de sa propre copie d'originalText.