Per creare effetto Matrx in una pagina html bisogna creare un file esterno matrix.js con il seguente codice:
function initMatrix() {
// 1. Crea il canvas dinamicamente se non esiste già nella pagina
let canvas = document.getElementById('matrixCanvas');
if (!canvas) {
canvas = document.createElement('canvas');
canvas.id = 'matrixCanvas';
document.body.prepend(canvas); // Lo inserisce all'inizio del body
}
const ctx = canvas.getContext('2d');
// 2. Gestione ridimensionamento finestra
function resizeCanvas() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
}
resizeCanvas();
window.addEventListener('resize', resizeCanvas);
// 3. Configurazione caratteri e colonne
const characters = 'アァカサタナハマヤャラワガザダバパイィキシチニヒミリヰギジヂビピウゥクスツヌフムユュルグズブヅプエェケセテネヘメレヱゲゼデベペオォコソトノホモヨョロヲゴゾドボポヴッン0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const fontSize = 16;
let columns = Math.floor(canvas.width / fontSize);
let drops = [];
for (let i = 0; i < columns; i++) {
drops[i] = Math.random() * -100;
}
// 4. Ciclo di disegno dell'animazione
function drawMatrix() {
ctx.fillStyle = 'rgba(0, 0, 0, 0.05)';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = '#00ff00';
ctx.font = fontSize + 'px monospace';
const currentColumns = Math.floor(canvas.width / fontSize);
if (currentColumns !== columns) {
columns = currentColumns;
drops = [];
for (let i = 0; i < columns; i++) {
drops[i] = Math.random() * -100;
}
}
for (let i = 0; i < drops.length; i++) {
const text = characters.charAt(Math.floor(Math.random() * characters.length));
ctx.fillText(text, i * fontSize, drops[i] * fontSize);
if (drops[i] * fontSize > canvas.height && Math.random() > 0.975) {
drops[i] = 0;
}
drops[i]++;
}
}
setInterval(drawMatrix, 33);
}
// Avvia l'effetto automaticamente appena il DOM è pronto
document.addEventListener('DOMContentLoaded', initMatrix);