Effetto Matrix in JS: spiegato
L'effetto più famoso degli anni 2000 è a mio avviso quello di Matrix™. Si può ottenere facilmente tale
effetto anche con un semplice javascript.
Quello che lascio qui sotto è un mio esempio di pagina HTML completa. Lo script è facilmente adattabile
all'interno di ogni pagina web.
Ho lasciato qui sotto il codice con i commenti che spiegano, passo per passo, come funziona lo script.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Effetto Matrix in JS: spiegato</title> <style> /* Per fare un effetto matrix a pieno schermo, togliere i margini */ body { margin: 0; overflow: hidden; } /* Il canvas occupera' tutto lo spazio della pagina */ #matrixDiv { width: 100vw; height: 100vh; } </style> </head> <body> <div id="matrixDiv"> <canvas id="matrixCanvas"></canvas> </div> <script> const canvas = document.getElementById("matrixCanvas"); const canvasdiv = document.getElementById("matrixDiv"); const contesto = canvas.getContext("2d"); let em1; let w; let h; let numcolonne; let colonne; function fnMatrixInizializza() { // Converti 1em in px em1 = parseInt(getComputedStyle(canvasdiv).fontSize); // Memorizza la larghezza e l'altezza in due variabili. w = canvas.width = canvasdiv.offsetWidth; h = canvas.height = canvasdiv.offsetHeight; // Verranno create un certo numero di colonne. numcolonne = Math.floor(w / em1) + 1; // Crea le colonne e riempile di zeri (nessun carattere). colonne = Array(numcolonne).fill(0); // Inizialmente, colora di nero lo sfondo del canvas. contesto.fillStyle = "#000000"; contesto.fillRect(0, 0, w, h); } fnMatrixInizializza(); function fnMatrix() { // Riduci il colore di tutto il canvas, verso il nero. contesto.fillStyle = "#00000010"; contesto.fillRect(0, 0, w, h); // Il nuovo carattere verra' colorato di verde. contesto.fillStyle = "#00ff00"; contesto.font = "1em monospace"; colonne.forEach((y, indice) => { // Ricava casualmente un carattere. let carattere = String.fromCharCode(Math.random() * 127); // Posiziona il cursore X sulla colonna giusta. let x = indice * em1; // Scrivi il carattere sul canvas. contesto.fillText(carattere, x, y); // Interrompi la discesa dei caratteri di tanto in tanto. if (y > (Math.random() * 5000)) colonne[indice] = 0; else colonne[indice] = y + em1; }); } // Disegna lo schermo una volta ogni 50ms. setInterval(fnMatrix, 50); // Se la pagina viene ridimensionata, aggiornare le variabili. window.onresize = function (evento) { fnMatrixInizializza(); }; </script> </body> </html>
Clicca qui per vedere il risultato finale.
2023
20 dic
20 dic