駭客帝國(guó)代碼雨

直接上源碼吧玷氏,作為一個(gè)新手罩抗,玩一玩開心就好

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>rain</title>
  <style type="text/css">
    * {
      margin: 0;
      padding: 0;
    }
    body {
      overflow: hidden;
    }
    #canvas {
      margin:0 auto;
    }
  </style>
</head>
<body>
  <canvas id="canvas" width='300px' height="200px">
    Your browser doesn't support the canvas'.
  </canvas>

<script type="text/javascript">

  // 可設(shè)置 density = 1, 幫助理解代碼原理
  const config = {
    // 背景初始值
    background: 'rgba(0,0,0,0.1)',
    // 字體
    font_size: 16,
    // 字體 css 屬性
    font: '16px arial',
    // 字體色
    color: '#0F0',
    // 展示的字體數(shù)組
    charsArr: '0123456789qwertyuiopasdfghjklzxcvbnm'.split(''),
    // 消失率閾值, 可以調(diào)整 density 來(lái)調(diào)整密度
    density: 0.95,
    // 獲取隨機(jī)字符
    randomChar: (chars) => {
      return chars[Math.floor(Math.random() * chars.length)]
    },
  }

  // 初始化 dom, 繪圖上下文 context, 存儲(chǔ)數(shù)據(jù)的'篩子' boult
  const init = () => {
    const canvas = document.querySelector('canvas')
    canvas.width = screen.width
    canvas.height = screen.height
    let columns = Math.floor(canvas.width / config.font_size)
    let boult = new Array(columns).fill(1)
    // 全屏事件綁定
    canvas.addEventListener('click', () => {
      if(canvas.webkitRequestFullScreen){
        canvas.webkitRequestFullScreen()
      }else if(canvas.mozRequestFullScreen){
        canvas.mozRequestFullScreen()
      }else if(canvas.requestFullScreen){
        canvas.requestFullscreen()
      }else{
        console.log("your bowser doesn't support fullscr.")
      }
    })
    const context = canvas.getContext('2d')

    return {
      canvas, context, boult
    }
  }


  const draw = (canvas, context, boult) => {

    const { background, color, font_size, font, charsArr, density } = config
    // 函數(shù)分開取, 不然代碼多了分不清
    const { randomChar } = config

    // 不斷繪制透明度為0.1的長(zhǎng)方形實(shí)現(xiàn)由灰變黑的過(guò)程,同時(shí)之前的字也會(huì)逐漸被覆蓋,然后消失
    context.fillStyle = background
    context.fillRect(0, 0, canvas.width, canvas.height)
    context.fillStyle = color
    context.font = font

    for(let i = 0; i < boult.length; i++) {

      let text = randomChar(charsArr)
      let posX = i*font_size
      let posY = boult[i]*font_size
      context.fillText(text, posX, posY)

      if(posY > canvas.height || Math.random() > density) {
        //超出屏幕或者產(chǎn)生隨機(jī)數(shù)超過(guò)density即重置這一個(gè)字符到初始位置
        boult[i] = 0
      }
      // 實(shí)現(xiàn)下滑
      boult[i]++
    }
  }

  const __main = () => {
    const { canvas, context, boult } = init()
    setInterval(()=>{
      draw(canvas, context, boult)
    }, 1000/40)
  }
  __main()

</script>
</body>
</html>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末如庭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子撼港,更是在濱河造成了極大的恐慌坪它,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帝牡,死亡現(xiàn)場(chǎng)離奇詭異往毡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)靶溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門开瞭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人墨技,你說(shuō)我怎么就攤上這事惩阶。” “怎么了扣汪?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵断楷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我崭别,道長(zhǎng)冬筒,這世上最難降的妖魔是什么恐锣? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮舞痰,結(jié)果婚禮上土榴,老公的妹妹穿的比我還像新娘。我一直安慰自己响牛,他們只是感情好玷禽,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呀打,像睡著了一般矢赁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贬丛,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天撩银,我揣著相機(jī)與錄音,去河邊找鬼豺憔。 笑死额获,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恭应。 我是一名探鬼主播抄邀,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼暮屡!你這毒婦竟也來(lái)了撤摸?” 一聲冷哼從身側(cè)響起毅桃,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤褒纲,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后钥飞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體莺掠,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年读宙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彻秆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡结闸,死狀恐怖唇兑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情桦锄,我是刑警寧澤扎附,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站结耀,受9級(jí)特大地震影響留夜,放射性物質(zhì)發(fā)生泄漏匙铡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一碍粥、第九天 我趴在偏房一處隱蔽的房頂上張望鳖眼。 院中可真熱鬧,春花似錦嚼摩、人聲如沸钦讳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜂厅。三九已至,卻和暖如春膊畴,著一層夾襖步出監(jiān)牢的瞬間掘猿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工唇跨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稠通,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓买猖,卻偏偏與公主長(zhǎng)得像改橘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玉控,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容