原生js+canvas實現(xiàn)下雪效果
更新時間:2020年08月02日 15:36:42 作者:Mr.王征
這篇文章主要為大家詳細(xì)介紹了原生js+canvas實現(xiàn)下雪效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了js+canvas實現(xiàn)下雪效果的具體代碼,供大家參考,具體內(nèi)容如下
效果展示:
源碼展示:
<!doctype html> <html> <head> <meta charset="utf-8"> <title>canvas下雪效果(原生js)</title> <style> * { margin: 0; padding: 0 } html, body { width: 100%; height: 100%; overflow: hidden; background-color: #222; } #canvas { position: absolute; top: 0; left: 0; } </style> </head> <body> <canvas id="canvas"></canvas> <img id="imgSnow" width="0" height="0" src="xh.png" alt="雪花"> <img id="bgSnow" width="100%" height="100%" src="bj.jpg" alt="背景"> <script> window.onload = function () { var canvas = document.getElementById("canvas"); var imgSnow = document.getElementById("imgSnow"); var bgSnow = document.getElementById("bgSnow"); var ctx = canvas.getContext('2d'); var mbody = document.querySelector("body"); canvas.width =mbody.offsetWidth; canvas.height = mbody.offsetHeight; var GetRandomNum = function (Min, Max) { var Range = Max - Min; var Rand = Math.random(); return (Min + Math.round(Rand * Range)); } // console.log(GetRandomNum(0, canvas.width)) var snowArray = {}; //雪花對象 var snowIndex = 0; //標(biāo)識符 var setting = { num: 30, //數(shù)量 snowSize: 20, //大小 startX: Math.random() * canvas.width, //起始橫坐標(biāo) startY: 0, //起始縱坐標(biāo) vy: 0.01 } function snow() { // 起始橫坐標(biāo) this.x = Math.random() * canvas.width; // 起始縱坐標(biāo) this.y = setting.startY; this.size = setting.snowSize + Math.random() * 10 - 10; //橫坐標(biāo)偏移量 this.vx = Math.random() * 3 - 2; //偏移量 //縱坐標(biāo)偏移量 this.vy = Math.random() * 10; this.life = 0; this.maxLife = 100; this.id = snowIndex; //當(dāng)前信息保存至對象snowArray snowArray[snowIndex] = this; snowIndex++; } snow.prototype.draw = function () { this.x += this.vx; this.y += this.vy; this.vy += setting.vy; this.life++; //刪除 if (this.y > canvas.height * 0.9 - 20) { snowArray[this.id] } else if (this.life >= this.maxLife) { snowArray[this.id] } ctx.drawImage(imgSnow, this.x, this.y, this.size, this.size) } setInterval(function () { ctx.drawImage(bgSnow, 0, 0, canvas.width, canvas.height); //數(shù) for (var i = 0; i < setting.num; i++) { if (Math.random() > 0.97) { new snow(); } } for (var i in snowArray) { snowArray[i].draw(); } }, 100)202082104246954 } </script> </body> </html>
圖片:
雪花:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript function函數(shù)種類詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript function函數(shù)種類,包括普通函數(shù)、匿名函數(shù)、閉包函數(shù),感興趣的小伙伴們可以參考一下2016-02-02JavaScript仿靜態(tài)分頁實現(xiàn)方法
這篇文章主要介紹了JavaScript仿靜態(tài)分頁實現(xiàn)方法,可實現(xiàn)模擬靜態(tài)效果的分頁功能,并且可以控制分頁的字符數(shù),使用時可根據(jù)情況進(jìn)行相應(yīng)的字段修改即可,非常靈活實用,需要的朋友可以參考下2015-08-08javascript:void(0)是什么意思及href=#與href=javascriptvoid(0)的區(qū)別
Javascript中void是一個操作符,該操作符指定要計算一個表達(dá)式但是不返回值,本文給大家介紹javascript:void(0)是什么意思及href=#與href=javascriptvoid(0)的區(qū)別,需要的朋友參考下2015-11-11bootstrap Table服務(wù)端處理分頁(后臺是.net)
這篇文章主要為大家詳細(xì)介紹了bootstrap Table服務(wù)端處理分頁,后臺是.net,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10js實現(xiàn)在文本框光標(biāo)處添加字符的方法介紹
在開發(fā)應(yīng)用中,經(jīng)常會遇到一些技術(shù)上的問題,比如:怎樣讓js在文本框光標(biāo)處添加字符,本文將以此問題進(jìn)行詳細(xì)介紹,需要了解的朋友可以參考下2012-11-11用jquery.sortElements實現(xiàn)table排序
實現(xiàn)table排序,網(wǎng)上有很多解決方案,很多都基于jQuery,最后我選擇用sortElements,實現(xiàn)很簡單2014-05-05