Animations/Motion Text Scramble

Motion Text Scramble

Le texte se debrouille — les caracteres se scramblent puis se fixent, ou glissent depuis le bas.

triggerJStextscrambletransition
Trigger: State change
CSS requis: Non
Difficulte: medium

Preview live

Code

"use client";
import { useState, useEffect } from "react";

const CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

export default function MotionText({ text = "Hello World" }) {
  const [display, setDisplay] = useState(text);

  const scramble = () => {
    let frame = 0;
    const totalFrames = text.length * 3;
    const interval = setInterval(() => {
      frame++;
      const resolved = Math.floor((frame / totalFrames) * text.length);
      setDisplay(
        text.split("").map((char, i) =>
          i < resolved ? char : CHARS[Math.floor(Math.random() * CHARS.length)]
        ).join("")
      );
      if (frame >= totalFrames) clearInterval(interval);
    }, 30);
  };

  useEffect(() => { scramble(); }, []);

  return (
    <div onClick={scramble} style={{ cursor: "pointer", fontFamily: "monospace" }}>
      {display}
    </div>
  );
}

Instructions

Le texte se scramble puis se fixe caractere par caractere. Cliquez pour re-trigger. Ajustez la vitesse (30ms), le multiplicateur (3) et les caracteres de scramble.