Matrix Code Rain
This is something that I wanted to do for a long time: Matrix code rain in Javascript.
The basic concept of the animation is the following:
- Form empty columns on the page,
- add a random character to a randomly selected column; repeat,
- replace columns that are too long to fit on the screen with empty ones.
# Setup
-
Declare our character set: half-width kana’s and lowercase ascii letters:
。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚
,0123456789abcdefghijklmnopqrstuvwxyz
-
define a function that returns a random value up to its argument (it will be used for generating random characters, selecting random columns and getting random intervals as well).
# Forming columns
- calculate the number of columns that fit onto the screen (to have some responsiveness),
- add the calulated number of
<div></div>
elements to the page.
# Doing the heavy lifting
At varying random intervals, do the following steps:
- select a random column, append a span element with
class='new'
, - append a random character to the new span,
- after 130 ms, set the span’s class to
old
.
The new
class represents a newly created character, white in color. The old
class is a bright green character.
At fixed intervals (50ms), do the following steps:
-
loop through all columns,
- check if the current column has more than 12 characters:
- if yes, set its class to
hidden
. The hidden class has a CSS transition effect that reduces its visibility in 1.3 seconds. - otherwise, do nothing,
- if yes, set its class to
- check if the current column has more than around 90% of the page’s height (this is calculated by getting the window height and the number of rows so far in the current div):
- if yes, replace that div with an empty one. At this point we are sure that the div’s class has been
hidden
, its visibility has been decreased for some time, so the removal is not too sudden to the eye. - otherwise, do nothing.
- if yes, replace that div with an empty one. At this point we are sure that the div’s class has been
That’s it: the main mechanism is done by manipulating the DOM at certain (random) intervals using the setInterval()
method.