Matrix raining code effect using JavaScript

The new Matrix movie is coming this year, and I ’ m so hyped for it that I had to create this iconic effect with my tools. Itse toteutus on todella yksinkertainen ja käytin siihen vain HTML: ää, CSS: ää ja vanilla JavaScriptiä.

jos haluat videoformaatin, voit katsoa siitä tutoriaalini YouTubesta:

toteutus

käytän HTML-kanavaa ”Digital rain” – efektin luomiseen, ja meillä on kaikki kirjautumiset javascriptissä.

HTML

HTML-tiedosto on todella yksinkertainen. Kropassa meillä on vain <canvas>, ja mukana on myös javascript-tiedosto täällä alareunassa, voit myös sisällyttää sen päähän defer – attribuutilla.

<html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="./styles.css"> <title>Matrix digital rain</title></head><body> <canvas></canvas> <script src="./index.js"></script></body></html>
Siirry kokoruututilaan poistu kokoruututilasta

CSS

tämäkin jää todella lyhyeksi. CSS vain periaatteessa tehdä elin täyttää koko kuvaikkunan ja asettaa Musta taustaväri sitä.

html { background: black; height: 100%; overflow: hidden;}body { margin: 0; padding: 0; height: 100%;}
Siirry kokoruututilaan poistu kokoruututilasta

Javascript

tämä toteutus on hankkeen Lion lionshare.
ensin on alustettava Kangas 2D-kontekstilla. Asetin myös kankaan ottamaan koko näkymän asettamalla sen leveyden ja korkeuden:

const canvas = document.getElementById('Matrix');const context = canvas.getContext('2d');canvas.width = window.innerWidth;canvas.height = window.innerHeight;
Siirry kokoruututilaan poistu kokoruututilasta

seuraavaksi luon aakkoset, joista poimimme merkit sadetta varten. Käytän katakana-hahmoja (muunnelmaa Katakana-symboleista käytettiin itse Matrix-elokuvassa.), latinalaisilla aakkosilla ja arabialaisilla numeroilla. Näiden yhdistäminen luo aakkoset.

const katakana = 'アァカサタナハマヤャラワガザダバパイィキシチニヒミリヰギジヂビピウゥクスツヌフムユュルグズブヅプエェケセテネヘメレヱゲゼデベペオォコソトノホモヨョロヲゴゾドボポヴッン';const latin = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';const nums = '0123456789';const alphabet = katakana + latin + nums;
Siirry kokoruututilaan poistu kokoruututilasta

meidän on laskettava, kuinka monta ”sadepylvästä” mahtuu näytölle, ja sitä varten asetan kiinteän kirjasinkoon ja jaan leveyden ikkunan sisävedelle saadakseni tarkan sarakeluvun.

const fontSize = 16;const columns = canvas.width/fontSize;
Siirry kokoruututilaan poistu kokoruututilasta

käytän antennia sadepisaroiden tallentamiseen ja muokkaamiseen. Tietyn elementin indeksi on sadepisaran koordinaatti X-akselilla, ja tietyn elementin arvo pitää sen koordinaatin Y-akselilla. Näin emme tarvitse 2D-järjestelmää. Alustaa array täytän sen kanssa ykkösiä, joten jälkeen alustus meillä on sama tarkka korkeus jokaisen sarakkeen: 1.

const rainDrops = ;for( let x = 0; x < columns; x++ ) { rainDrops = 1;}
Siirry kokoruututilaan poistu kokoruututilasta

nyt on aika toteuttaa tulisija meidän vaikutus piirtää toiminto. Ensin maalaamme koko kankaan läpinäkyvällä mustalla värillä. Tämä antaa meille trail vaikutus sadepisarat, kun pisara putoaa jo hukkua merkkiä hiljalleen häivyttää. Seuraavaksi asetan kirjasinkoon ja värin (tietenkin se on vihreä 😎). Ja nyt tulee 🔑 – avain. Kierrän sadepisara-järjestelmän läpi ja valitsen jokaiselle alkuaineelle satunnaisen merkin aakkosistamme ja teen sen sarakkeen seuraavassa asennossa. Tärkeää tässä on, että sinun täytyy kertoa koordinaatit (alkuainearvo ja indeksi) fonttikoko saada täydellinen väli. Lopuksi meidän on siirrettävä sadepisaramme, jotka putosivat näkymän korkeuden alapuolelle, tuon pylvään yläosaan. Saada sade vaikutus en laita sitä alkuun heti, mutta lisätä hieman satunnaisuutta lisäämällä satunnainen mahdollisuus tehdä, että.

const draw = () => { context.fillStyle = 'rgba(0, 0, 0, 0.05)'; context.fillRect(0, 0, canvas.width, canvas.height); context.fillStyle = '#0F0'; context.font = fontSize + 'px monospace'; for(let i = 0; i < rainDrops.length; i++) { const text = alphabet.charAt(Math.floor(Math.random() * alphabet.length)); context.fillText(text, i*fontSize, rainDrops*fontSize); if(rainDrops*fontSize > canvas.height && Math.random() > 0.975){ rainDrops = 0; } rainDrops++; }};
Siirry kokoruututilaan poistu kokoruututilasta

viimeisenä vaiheena minun on kutsuttava draw-funktiota välein ja tämä kutsuu draw-funktiota 30ms välein.

setInterval(draw, 30);
Siirry kokoruututilaan poistu kokoruututilasta

johtopäätös

tämä on todella hauska projekti luoda ja yritin pitää toteutuksen niin aloittelijaystävällisenä kuin pystyin. Toivottavasti nautit siitä, jos etsit opetussisältöä web development follow me, luon opettavaisia YouTube-videoita, ja Instagram-viestejä liian.

Hyvää Hakkerointia!

missä voit oppia minulta lisää?

luon koulutussisältöjä, jotka kattavat web-kehityksen useilla alustoilla, voit vapaasti check tarkistaa ne.

luon myös uutiskirjeen, jossa Jaan luomani viikon tai 2 viikon koulutussisällön. No bull💩 vain opetuksellinen sisältö.

🔗 linkit:

  • 🍺 Support free education and buy me a beer
  • 💬 Join our community on Discord
  • 📧 Newsletter Subscribe here
  • 🎥 YouTube Javascript Academy
  • 🐦 Twitter: @dev_adamnagy
  • 📷 Instagram @javascriptacademy

Leave a Reply

Sähköpostiosoitettasi ei julkaista.