Texte✨ Premium

Text Shuffle Reveal

Chaque lettre parcourt une cascade de substitutions aléatoires avant de se verrouiller sur la bonne valeur — l'effet décodeur caractère par caractère, 100 % vanilla.

JSDecodeReveal

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

Splash screen — Titre de produit décodé à l'ouverture — Text Shuffle Reveal exemple 1

① Splash screen — Titre de produit décodé à l'ouverture

QuandL'écran de démarrage s'affiche : le nom de l'application ou le slogan principal se révèle caractère par caractère dès le chargement de la page.
PourquoiSur un fond sombre pleine largeur, la cascade de substitutions capte l'attention avant même que le texte soit lisible — idéale pour ancrer l'identité du produit dans les premières secondes.
Réglagesfont-size 5–6 rem, texte en majuscules, CYCLE_SPEED 40 ms (rapide), STAGGER 50 ms, CYCLES_PER_CHAR 10.
Une de magazine numérique — Titre d'article révélé au scroll — Text Shuffle Reveal exemple 2

② Une de magazine numérique — Titre d'article révélé au scroll

QuandLe lecteur scrolle jusqu'à l'en-tête d'un long article : le titre principal se décode au moment où la section entre dans le viewport via <code>IntersectionObserver</code>.
PourquoiL'effet crée un moment de mise en scène qui prolonge l'attention avant la lecture. Les substitutions évoquent la composition typographique, ancrant l'effet dans la culture imprimée.
RéglagesCHARS limité aux lettres majuscules pour un registre éditorial, CYCLE_SPEED 60 ms, STAGGER 80 ms pour une cadence plus posée.
Écran de récompense — Code d'accès déchiffré en temps réel — Text Shuffle Reveal exemple 3

③ Écran de récompense — Code d'accès déchiffré en temps réel

QuandUn niveau est terminé ou un succès débloqué : le code secret, le nom du trophée ou le score final s'affiche en mode décodage juste avant la transition vers l'écran suivant.
PourquoiLes substitutions rapides amplifient la tension de la révélation — chaque lettre qui se verrouille renforce la sensation de découverte. L'esthétique hacker est immédiatement lisible par les joueurs.
RéglagesCHARS incluant chiffres et symboles (#@!0-9A-Z), CYCLE_SPEED 35 ms, CYCLES_PER_CHAR 12, police monospace.

Comment ça marche

Le container .kt-text.kt-shuffle porte l'attribut data-text qui définit le texte cible. La fonction splitChars() lit cette valeur, vide l'élément et reconstruit autant de <span class="char" data-char="X">?</span> que de caractères : la valeur cible est archivée dans data-char, le textContent initial est un caractère aléatoire.

À chaque tick d'un setInterval (≈ 50 ms), chaque span reçoit un nouveau caractère tiré du pool CHARS (lettres A–Z + a–z, chiffres, symboles). Un compteur par position limite les substitutions à CYCLES_PER_CHAR itérations ; une fois la limite atteinte, l'intervalle est annulé et le span affiche la valeur data-char à pleine opacité blanche.

Un délai d'amorçage échelonné (STAGGER, ≈ 60 ms par position) décale les démarrages de gauche à droite via setTimeout : la première lettre se verrouille avant même que la dernière ait commencé à cycler, produisant la cascade révélatrice typique de l'effet.

Un listener click sur le container rappelle shuffleReveal() — chaque span retrouve une valeur aléatoire à demi-opacité et le cycle repart de zéro. La fonction splitChars() reconstruit la structure spans si le textContent a été modifié entre deux appels.

Accessibilité

  • Pas de bloc @media (prefers-reduced-motion: reduce) dans le code fourni — les utilisateurs ayant activé cette préférence OS voient l'animation cycler normalement. À ajouter : tester matchMedia('(prefers-reduced-motion: reduce)').matches au démarrage et, si vrai, afficher directement la valeur data-char sans lancer les intervalles.
  • Les .char en transit ne portent pas aria-hidden — un lecteur d'écran peut lire les lettres aléatoires intermédiaires. Solution : ajouter aria-hidden="true" sur le container animé et fournir un élément <span class="sr-only"> séparé contenant le texte cible.
  • Aucun attribut role ni aria-label sur le container par défaut — ajouter aria-label="texte cible" et aria-live="off" si le container est le seul véhicule du contenu textuel.
  • Le déclencheur click n'est pas accessible au clavier (pas de tabindex ni listener keydown) — ajouter tabindex="0" et écouter Enter / Space pour les utilisateurs clavier.
  • Les caractères transitoires sont affichés en rgba(255,255,255,0.5) sur fond #0a0a0f (ratio ≈ 3,5:1, sous le seuil WCAG AA de 4,5:1). Acceptable pour une animation brève sur fond sombre ; à renforcer si la durée de cycle est longue ou le fond plus clair.

Compatibilité navigateur

Nécessite DOM Level 2, setInterval et addEventListener — présents dans tous les navigateurs modernes depuis 2012.

Chrome 80+✓ Complet
Firefox 75+✓ Complet
Safari 13+✓ Complet
Edge 80+✓ Complet
Mobile iOS✓ Complet
Android Chrome✓ Complet

Si JS est désactivé, les spans <code>.char</code> affichent les caractères aléatoires pré-générés — le contenu n'est pas lisible. Prévoir un <code>&lt;noscript&gt;</code> ou un attribut <code>aria-label</code> sur le container pour rendre le texte accessible.

Le code

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

index.html — structure
<div class="kt-text kt-shuffle" id="shuffle1" data-text="VOTRE TEXTE" style="cursor: pointer;">
  <!-- splitChars() génère dynamiquement les spans :
  <span class="char" data-char="V">?</span>
  <span class="char" data-char="O">?</span>
  … un span par caractère de data-text -->
</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
data-text "SHUFFLE" Texte à révéler. Modifiable à la volée : mettre à jour l'attribut, rappeler splitChars(el) puis shuffleReveal(el).
CHARS (const JS) A-Za-z0-9 + symboles Pool de caractères aléatoires. Réduire à 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' pour un rendu typographique pur ; étendre aux chiffres et symboles pour l'esthétique hacker.
CYCLE_SPEED (const JS) 50 ms Intervalle en ms entre chaque substitution par position. 35 ms = très rapide (hacker), 80–100 ms = lent et éditorial.
CYCLES_PER_CHAR (const JS) 8 Nombre de substitutions aléatoires avant verrouillage. Augmenter (12–16) pour prolonger la tension ; réduire (4–5) pour une révélation quasi-immédiate.
STAGGER (const JS) 60 ms Décalage en ms entre le démarrage de chaque position. 0 = toutes les lettres cyclent en même temps ; 120 ms = cascade très progressive.
.kt-text { font-size } 2.2rem Taille du texte — la hauteur de ligne et le letter-spacing héritent automatiquement.
couleur transitoire (inline) rgba(255,255,255,0.5) Couleur des chars aléatoires en transit. La valeur verrouillée bascule vers #fff (pleine opacité) à l'issue du cycle.

FAQ

Mettez à jour l'attribut data-text du container, appelez splitChars(el) pour reconstruire les spans, puis relancez l'animation : el.setAttribute('data-text','NOUVEAU'); splitChars(el); shuffleReveal(el);
Remplacez ou complétez le listener click par un IntersectionObserver sur le container. Dans le callback, appelez shuffleReveal(el) quand entry.isIntersecting est vrai, puis observer.disconnect() si vous ne souhaitez qu'un seul déclenchement.
Oui — le code est 100 % vanilla DOM. Dans React, appelez shuffleReveal dans un useEffect après le montage ; dans Vue, dans le hook mounted ; dans Svelte, dans onMount. L'animation ne touche que le textContent et le style.color des spans — pas de conflits avec le rendu du framework.