JavaScript實(shí)現(xiàn)字符雨效果
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)字符雨效果的具體代碼,供大家參考,具體內(nèi)容如下
<html> ? ? <head> ? ? ? ? <meta charset="utf8"/> ? ? ? ? <title>字符雨</title> ? ? ? ? <style> ? ? ? ? ? ? body { ? ? ? ? ? ? ? ? color:white; ? ? ? ? ? ? ? ? background-color:black; ? ? ? ? ? ? ? ? overflow:hidden; ? ? ? ? ? ? } ? ? ? ? </style> ? ? </head> ? ? <body onresize="init()"> ? ? ? ? <div> ? ? ? ? 幀率(fps): ? ? ? ? <input id="fpsNum" type="number" min="1" max="35" step="2" value="24" /> ? ? ? ? <input id="switchBtn" type="button" value="stop" onclick="switchState()" /> ? ? ? ? </div> ? ? ? ? <canvas id="canvas">您的瀏覽器不支持canvas</canvas> ? ? ? ? <script> ? ? ? ? ? ? var c = document.getElementById("canvas"); ? ? ? ? ? ? var fpsNum = document.getElementById("fpsNum"); ? ? ? ? ? ? var switchBtn = document.getElementById("switchBtn"); ? ? ? ? ? ? var ctx = c.getContext("2d"); ? ? ? ? ? ? //動(dòng)畫是否已經(jīng)開(kāi)始 ? ? ? ? ? ? var isStart = true; ? ? ? ? ? ? //循環(huán)調(diào)用器id ? ? ? ? ? ? var intervalId = 0; ? ? ? ? ? ? //每次循環(huán)繪制一個(gè)0.1透明度的蒙版,讓以前繪制的文字留下一段陰影效果 ? ? ? ? ? ? var clearColor = "rgba(0,0,0,.1)"; ? ? ? ? ? ? //文字大小 ? ? ? ? ? ? var fontSize = 20; ? ? ? ? ? ? //文字 ? ? ? ? ? ? var font = fontSize + "px arial"; ? ? ? ? ? ? //文字顏色 ? ? ? ? ? ? var fontColor = "#0f0" ? ? ? ? ? ? //存儲(chǔ)每列的起始坐標(biāo) ? ? ? ? ? ? var drops = []; ? ? ? ? ? ? //重啟程序 ? ? ? ? ? ? function init() { ? ? ? ? ? ? ? ? c.width = document.body.offsetWidth; ? ? ? ? ? ? ? ? c.height = document.body.offsetHeight; ? ? ? ? ? ? ? ? //文字的列數(shù) ? ? ? ? ? ? ? ? var columns = Math.floor(c.width / fontSize); ? ? ? ? ? ? ? ? //原來(lái)的列數(shù) ? ? ? ? ? ? ? ? var len = drops.length; ? ? ? ? ? ? ? ? if(len < columns) { ? ? ? ? ? ? ? ? ? ? for(var i=len; i<columns; i++) { ? ? ? ? ? ? ? ? ? ? ? ? //初始化隨機(jī)的列坐標(biāo) ? ? ? ? ? ? ? ? ? ? ? ? drops.push(Math.floor(Math.random() * c.height)); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? drops.slice(columns, len - columns); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? //如果當(dāng)前已經(jīng)正在繪制,則需要先終止繪制再重啟繪制 ? ? ? ? ? ? ? ? if(isStart) { ? ? ? ? ? ? ? ? ? ? switchState(); ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ? switchState(); ? ? ? ? ? ? } ? ? ? ? ? ? //繪制 ? ? ? ? ? ? function draw() { ? ? ? ? ? ? ? ? ctx.save(); ? ? ? ? ? ? ? ? ctx.translate(c.width, 0); ? ? ? ? ? ? ? ? ctx.scale(-1, 1); ? ? ? ? ? ? ? ? ctx.font = font; ? ? ? ? ? ? ? ? ctx.fillStyle = fontColor; ? ? ? ? ? ? ? ? drops.map(function(currentValue, index) { ? ? ? ? ? ? ? ? ? ? //接受一個(gè)或多個(gè)unicode值,然后返回一個(gè)字符串 ? ? ? ? ? ? ? ? ? ? var text = String.fromCharCode(65 + Math.round(Math.random() * 33)); ? ? ? ? ? ? ? ? ? ? //var text = Math.floor(Math.random() * 2); ? ? ? ? ? ? ? ? ? ? var x = index * fontSize; ? ? ? ? ? ? ? ? ? ? var y = currentValue * fontSize; ? ? ? ? ? ? ? ? ? ? ctx.fillText(text, x, y); ? ? ? ? ? ? ? ? ? ? if(y > c.height * 0.6 && Math.random() > 0.85) { ? ? ? ? ? ? ? ? ? ? ? ? drops[index] = 0; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? drops[index]++; ? ? ? ? ? ? ? ? }); ? ? ? ? ? ? ? ? ctx.restore(); ? ? ? ? ? ? ? ? ctx.fillStyle = clearColor; ? ? ? ? ? ? ? ? ctx.fillRect(0, 0, c.width, c.height); ? ? ? ? ? ? ? } ? ? ? ? ? ? //切換當(dāng)前狀態(tài)(開(kāi)始 或 停止) ? ? ? ? ? ? function switchState() { ? ? ? ? ? ? ? ? ? ? isStart = !isStart; ? ? ? ? ? ? ? ? if(isStart) { ? ? ? ? ? ? ? ? ? ? switchBtn.value = "stop"; ? ? ? ? ? ? ? ? ? ? intervalId = setInterval(draw, 1000/fpsNum.value); ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? switchBtn.value = "start"; ? ? ? ? ? ? ? ? ? ? clearInterval(intervalId); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? init(); ? ? ? ? </script> ? ? </body> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實(shí)現(xiàn)JSON合并操作示例【遞歸深度合并】
這篇文章主要介紹了JavaScript實(shí)現(xiàn)JSON合并操作,結(jié)合實(shí)例形式分析了javascript基于遞歸深度實(shí)現(xiàn)json合并操作相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2018-09-09js實(shí)現(xiàn)類似新浪微博首頁(yè)內(nèi)容漸顯效果的方法
這篇文章主要介紹了js實(shí)現(xiàn)類似新浪微博首頁(yè)內(nèi)容漸顯效果的方法,實(shí)例分析了漸顯效果的實(shí)現(xiàn)要點(diǎn)與方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04JavaScript控制網(wǎng)頁(yè)平滑滾動(dòng)到指定元素位置的方法
這篇文章主要介紹了JavaScript控制網(wǎng)頁(yè)平滑滾動(dòng)到指定元素位置的方法,實(shí)例分析了javascript操作頁(yè)面滾動(dòng)的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04Bootstrap 表單驗(yàn)證formValidation 實(shí)現(xiàn)表單動(dòng)態(tài)驗(yàn)證功能
這篇文章主要介紹了Bootstrap 表單驗(yàn)證formValidation 實(shí)現(xiàn)表單動(dòng)態(tài)驗(yàn)證功能,需要的朋友可以參考下2017-05-05JavaScript實(shí)現(xiàn)瀑布流圖片效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)瀑布流圖片效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06