Shefarol Soluções Web

Efeito Matrix - Voltar

Código em Javascript

ATENÇÃO!!! O código abaixo fará o recurso na página inteira, diferente do modelo acima, defini apenas o meu canvas para 600 x 400px

<script>
    // Pegando o elemento do Canvas
    const c = document.getElementById("matrix");

    // Definindo o seu contexto
    const ctx = c.getContext("2d");

    // definindo o canvas com tamanho máximo da tela
    c.height = window.innerHeight;
    c.width = window.innerWidth;

    // letras do Matrix Rain
    // ver mais em: https://bit.ly/3yFJoU3
    const letters = ["日","ハ","ミ","ヒ","ー","ウ","シ","ナ","モ","ニ","サ","ワ","ツ","オ","リ","ア","ホ","テ","マ","ケ","メ","エ","カ","キ","ム","ユ","ラ","セ","ネ","ス","タ","ヌ","ヘ",":","・",".","=","*","+","-","<",">","¦","|","リ"];

    const fontSize = 18;

    // definindo quantas colunas serão necessárias pelo tamanho da tela e fonte
    const columns = c.width / fontSize;

    // criando um array para cada gota, sempre iniciando na posição do y=1
    const drops = new Array(Math.floor(columns)).fill(1);

    function draw() {
        // preenchendo a tela toda de preto com opacidade
        // esse truque da opacidade será útil para o efeito 
        // das letras sumindo aos poucos
        ctx.fillStyle = "rgba(0, 0, 0, 0.05)";
        ctx.fillRect(0, 0, c.width, c.height);

        // definindo a cor e estilo da fonte
        ctx.fillStyle = "#0F0";
        ctx.font = `${fontSize}px arial`;

        for (let i = 0; i < drops.length; i++) {
            // pegando uma letra randomicamente no nosso array
            const text = letters[Math.floor(Math.random() * letters.length)];

            // escrevendo na tela
            ctx.fillText(text, i * fontSize, drops[i] * fontSize);

            // resetando a posição da gota ao chegar no fim
            if (drops[i] * fontSize > c.height && Math.random() > 0.95) {
            drops[i] = 0;
            }

            // movendo as gotas no eixo y
            drops[i]++;
        }

        // chamada recursiva para animar quadro a quadro
        window.requestAnimationFrame(draw);
    }

    // chamando a função criada
    draw()
</script>