js實現黑客帝國二進位制雨

2022-02-04 00:18:24 字數 2638 閱讀 8607

作者主頁:myvin

感謝antineutrino和cyclone77的意見,點選兩位博主id可檢視其主頁。

因為之前是判斷落出視口高度並且大於乙個隨機數才再次繪製,中間會有一斷間隔,所以會有一斷一斷的感覺,已經將高度判斷修改為2/3,這樣會好一些,已在文中同步修改,且下文會有對應說明。

再次感謝antineutrino和cyclone77,點選兩位博主id可檢視其主頁。

關於**和實際實現效果可以點選這裡去codepen上檢視。

黑客帝國有乙個經典畫面:電影開頭下綠色數字雨(是數字還是文字,記不清了。。。),這裡我們用js來實現,下二進位制雨(下什麼都可以,只是二進位制顯得有科技感)。

網上有下文字雨的實現,思路基本上是一樣,如感興趣,請自行搜尋。

先上效果圖:

關於**和實際效果請這裡去codepen上檢視。

在這裡,我們主要用到的是h5裡面的canvas畫布標籤,canvas只是定義了乙個畫布,並沒有繪製功能,要實現繪製得用js。關於canvas的相關知識請自行搜尋,在此不再贅述。

好的,進入正文。

首先是簡單reset一下樣式:

*

body

為了實現乙個全屏沒有滾動條的效果,這裡對於溢位的hidden。

然後定義了乙個id為martrix的畫布:

接著在畫布上進行繪製。

接下來是canvas的一些基本操作,獲得上下文環境:

var matrix=document.getelementbyid("matrix");

var context=matrix.getcontext("2d");

因為是實現視口的全屏效果,所以先獲得視口,並設定成畫布大小:

matrix.height=window.innerheight;

matrix.width=window.innerwidth;

接下來我們設定字型大小變數,並根據字型大小來獲得二進位制雨的列數,同時定義乙個陣列,用來動態改變y座標,如下:

var drop=;

var font_size=16;

var columns=matrix.width/font_size;

for(var i=0;i然後我們開始寫繪製函式drawmatrix:

先給出drawmartrix函式:

function drawmatrix()

}

因為判斷落出視口高度並且大於乙個隨機數才再次繪製,中間會有一斷間隔,所以會有一斷一斷的感覺,已經將高度判斷修改為2/3,這樣會好一些。修改的程式如下,並已經在文章同步修改:

if(drop[i]*font_size>(matrix.height*2/3)&&math.random()>0.85)/*reset*/

簡單說一下上面的繪製函式:

首先繪製了乙個視口大小的矩形,並用rgba(0, 0, 0, 0.1)來填充,請注意這裡的不同明度,這裡的不透明度將會影響下落的效果。因為是一遍一遍繪製,如果將將其設定為完全不透明或者不透明度比較高,那麼當繪製完一遍,再繪製第二遍的時候,上一次繪製出來的數字就會被完全遮蓋,這樣數字透明漸變的效果就會很差。

修改不透明度引數的實時效果,可以點選這裡去codepen上就行修改實時檢視效果。

接下來我們設定下落的數字。數字文字是用filltext來繪製的。首先,我們將數字文字顏色設定為green,然後設定數字文字字型大小,在這裡加上單位px,context.font=font_size+"px"。接下來就是乙個迴圈了。

這個迴圈思路是這樣的:

用迴圈來控制顯示位置,並在顯示位置上繪製數字文字,陣列為random的0或1的隨機值,然後進行if判斷,如果超出螢幕高度,則重新從頭繪製。

context.filltext(math.floor(math.random()*2),i*font_size,drop[i]*font_size)中,後兩個引數是xy座標位置,很好理解,if(drop[i]*font_size>matrix.height&&math.random()>0.85)/*reset*/

中,如果沒有math.random()>0.85的限制,則效果是迴圈每列數字同時從視口上面出現,同時從視口的2/3處消失,沒有隨機的效果,所以加乙個random來限制,效果如下:

修改random引數的實時效果,可以點選這裡去codepen上就行修改實時查效果。

最後一步就是把繪製函式迴圈呼叫:

setinterval(drawmatrix,50);
迴圈的時間間隔自行設定,修改迴圈時間間隔引數可以點選這裡去codepen上就行修改實時查效果。

最後,祝大家都過好每一天~~

原文出處:

*****************************************

JS實現《黑客帝國》字元雨飄落特效

此段 通過canvas元素實現了電影 黑客帝國 中進入matrix的終端介面的乙個動畫效果。相容h5和各種版本的瀏覽器。可以在這裡看到線上效果,點我,點我!在瀏覽器中開啟,配上f11全屏效果,效果棒棒的!在 的起始部分,使用了乙個相容低版本瀏覽器的requestanimationframe的方法。也...

leetcode 顛倒二進位制位(js實現)

顛倒給定的 32 位無符號整數的二進位制位。示例 1 輸入 00000010100101000001111010011100 輸出 00111001011110000010100101000000 解釋 輸入的二進位制串00000010100101000001111010011100 表示無符號整數...

間接二進位制編碼 實現十進位制小數的二進位制編碼

matlab中只能夠實現十進位制整數轉換為二進位制,對於小數部分會直接忽略,這對於精確度很高的資料來說,非常不合理。下面是自己編寫的實現十進位制小數的二進位制編碼的matlab 基本原理 含小數的十進位制數轉二進位制 dec2inderectbin d 十進位制數 或陣列 down 十進位制數取值範...