Texte✨ Premium

Typewriter Glitch

Machine à écrire lettre par lettre avec bursts de glitch aléatoires — échanges de caractères et scintillements qui s'autocorrigent à chaque frappe, texte en boucle.

JSTypewriterGlitch

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

Hero terminal — Landing page outil CLI — Typewriter Glitch exemple 1

① Hero terminal — Landing page outil CLI

QuandUne landing page pour un outil de développement, un SaaS technique ou un produit à l'esthétique terminal/rétro-futur.
PourquoiL'effet tape la promesse-produit lettre par lettre ; les interruptions glitch renforcent l'identité « machine » sans alourdir la page — aucun canvas, aucun framework.
Réglagesdata-text="BUILD. DEPLOY. REPEAT_", font-size 3rem, couleur brand primaire à la place du blanc, pause de restart à 3 000 ms.
Écran de démarrage — Dashboard système rétro — Typewriter Glitch exemple 2

② Écran de démarrage — Dashboard système rétro

QuandUn dashboard de monitoring, un outil DevOps ou un jeu avec interface façon terminal affiche une séquence de boot ou un statut en cours.
PourquoiLa frappe lettre par lettre imite un vrai terminal ; les glitchs créent l'impression d'un signal instable sans JS lourd — idéal pour des messages courts comme « CONNEXION… » ou « SCAN EN COURS_ ».
Réglagesdata-text="CONNEXION EN COURS_", font-size 1.1rem, couleur verte (#00ff88), probabilité de glitch à 40 % (Math.random() < 0.40).
Message intercepté — Fiction interactive ou ARG — Typewriter Glitch exemple 3

③ Message intercepté — Fiction interactive ou ARG

QuandUn jeu narratif, une fiction interactive ou un ARG présente un message d'une source inconnue comme une transmission corrompue reçue en direct.
PourquoiLe glitch n'est plus décoratif : il devient mécanique de narration. Chaque auto-correction simule un décryptage en temps réel — le registre de décodage est justifié par l'effet lui-même, pas plaqué dessus.
Réglagesdata-text="PROTOCOLE ALPHA COMPROMIS_", font-size 1.1rem, couleur cyan (#00e5ff), probabilité de glitch à 45 % (Math.random() < 0.45), taux de corruption à 50 % (Math.random() < 0.50), pause de restart à 4 000 ms.

Comment ça marche

Le texte de l'attribut data-text est tapé caractère par caractère via des setTimeout enchaînés (délai aléatoire 80–180 ms par frappe). Un curseur clignotant (|) est géré indépendamment par un setInterval à 530 ms qui appende ou retire le | du textContent de l'élément — les deux minuteries coexistent sans se bloquer.

À chaque frappe, une probabilité de 25 % déclenche un burst de glitch : 3 à 6 frames espacées de 50 ms parcourent les caractères déjà tapés et remplacent aléatoirement 35 % d'entre eux par un symbole du set !@#$%^&*()_+-=[]{}|;:<>?/~`0123456789. Pendant le burst, l'opacité de l'élément oscille entre 1 et 0,6 pour simuler un scintillement vidéo. À la fin du burst, le texte correct est restauré avant de passer à la lettre suivante.

À la fin du texte, l'animation marque une pause de 2 000 ms puis repart de l'index 0 — boucle infinie. L'ensemble est un IIFE vanilla : zéro dépendance, zéro canvas, zéro animation CSS. La police Courier New est une police système — aucun chargement réseau requis.

Accessibilité

  • Pas de prefers-reduced-motion dans le code livré : l'animation tourne quel que soit le réglage OS. Pour les utilisateurs sensibles, ajoutez manuellement if (matchMedia('(prefers-reduced-motion: reduce)').matches) return; en tête de l'IIFE.
  • L'élément expose son contenu via textContent — lisible par les lecteurs d'écran, mais les mutations rapides pendant un burst de glitch peuvent déclencher des annonces parasites. Enveloppez dans un <span aria-live="off"> pour les supprimer.
  • Contraste élevé : texte blanc (#fff) sur fond sombre (#0a0a0f) — ratio ≈ 21:1, WCAG AAA.
  • Aucune interaction clavier ni zone focusable : effet purement décoratif. Si utilisé comme titre principal, ajoutez aria-label avec le texte final statique.
  • La police Courier New est une police système omniprésente — pas de FOUT, pas de requête réseau.

Compatibilité navigateur

Utilise uniquement textContent, setInterval et setTimeout — aucun Canvas, aucune animation CSS, aucune API récente requise.

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

Sans JavaScript, l'élément affiche le caractère <code>|</code> initial (contenu statique du DOM) — la page reste lisible, aucune erreur fatale.

Le code

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

index.html — structure
<div class="kt-text kt-typewriter-glitch" id="typewriter1" data-text="VOTRE TEXTE_">|</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 "TYPEWRITER_" Texte à taper — modifiez cet attribut HTML pour changer le contenu sans toucher au JS.
var fullText (JS) "TYPEWRITER_" Fallback JS si data-text est absent. Initialisez cette variable directement dans le code.
setTimeout(80 + Math.random() * 100) (JS) 80–180 ms/car. Vitesse de frappe. Remplacez par setTimeout(typeNext, 120) pour une cadence constante, ou réduisez à 40 ms pour un rendu rapide.
Math.random() < 0.25 (JS) 25 % Probabilité de déclenchement d'un burst de glitch par caractère tapé. Montez à 0,50 pour un effet plus chaotique, descendez à 0,05 pour un rendu quasi propre.
Math.random() < 0.35 (JS) 35 % Taux de corruption des caractères pendant un burst. 0,10 = glitch subtil, 0,70 = texte quasi illisible.
setInterval(530) (JS) 530 ms Vitesse de clignotement du curseur. 300 ms = rapide, 800 ms = lent. Modifiez la valeur dans le setInterval.
.kt-text font-size (CSS) 2.2rem Taille du texte. Augmentez à 4–6rem pour un usage hero plein écran.
.kt-typewriter-glitch font-family (CSS) "Courier New", monospace Police. Remplacez par Georgia, Arial ou une police chargée localement pour changer l'esthétique.
setTimeout(…, 2000) (JS — boucle) 2 000 ms Délai avant redémarrage après le texte complet. Augmentez à 5 000 ms pour une pause longue, ou supprimez l'appel pour stopper après une seule passe.

FAQ

L'IIFE cible un getElementById unique. Pour plusieurs instances, extrayez la logique en fonction paramétrée : function initTypewriter(id, text) { var el = document.getElementById(id); var fullText = text; … typeNext(); } puis appelez-la pour chaque élément avec son id et son texte.
Non, elle boucle indéfiniment. Pour une passe unique, supprimez le setTimeout(function() { idx = 0; typeNext(); }, 2000) dans la branche finale de typeNext() — l'animation s'arrête alors sur le curseur clignotant une fois le texte complet affiché.
Supprimez le setInterval du curseur et remplacez border-right: 3px solid rgba(255,255,255,.7) par border-right: none dans .kt-typewriter-glitch. Dans typeNext(), retirez aussi les concaténations (cursorVisible ? '|' : '').