您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用JS+Canvas實現雪花紛飛的場景”,在日常操作中,相信很多人在怎么使用JS+Canvas實現雪花紛飛的場景問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用JS+Canvas實現雪花紛飛的場景”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
頁面html,body
設置寬100%
、高100vh
,鋪滿整個屏幕,并設置一張好看的背景圖或者背景色,能夠很好地和白色的雪花相融合
定義一個類:雪花Snowflake
,首先設計每一片雪花對象的數據結構:
a. 雪花的坐標x、y坐標,以及左右移動的速度vx、vy。(由于雪花的位置是不斷移動的)
x坐標 0到窗口寬度的一個隨機數
y坐標 0到窗口高度的一個隨機數(因為雪花是從頁面上方進入頁面,因此窗口高度要為負值)
左右移動的速度vx、vy 任意取兩個合適的數值的隨機數
b. 雪花的半徑radius
c. 雪花的透明度alpha
每一片雪花的坐標、移動速度、半徑、透明度都是隨機生成的
更新雪花的位置:當雪花移動到頁面最底部,需要更新每一片雪花的數據
class Snowflake { constructor() { this.x = 0; this.y = 0; this.vx = 0; this.vy = 0; this.radius = 0; this.alpha = 0; this.reset(); } reset() { this.x = this.randBetween(0, window.innerWidth); this.y = this.randBetween(0, -window.innerHeight); this.vx = this.randBetween(-3, 3); this.vy = this.randBetween(2, 5); this.radius = this.randBetween(1, 4); this.alpha = this.randBetween(0.1, 0.9); } randBetween(min, max) { return min + Math.random() * (max - min); } update() { this.x += this.vx; this.y += this.vy; if (this.y + this.radius > window.innerHeight) { this.reset(); } } }
a. 使用js創建元素Canvas,定義一個畫布,并添加到body元素中
b. 設置畫布的大小,并且監聽窗口,當窗口大小發生改變時,也需要調整畫布的大小(和窗口的寬高一樣),以便保證Canvas是滿屏的
c. 實現下雪的效果
生成雪花,生成雪花的數量根據窗口寬度的4分之一設置。并設置一個數組保存生成的每片雪花對象,以便requestAnimationFrame函數在調用時候,更改各個雪花的位置,從而實現下雪的效果
使用Canvas畫雪
class Snow { constructor() { this.canvas = document.createElement("canvas"); this.ctx = this.canvas.getContext("2d"); document.body.appendChild(this.canvas); window.addEventListener("resize", () => this.onResize()); this.onResize(); this.updateBound = this.update.bind(this); //實現動畫 requestAnimationFrame(this.updateBound); this.createSnowflakes(); } onResize() { this.width = window.innerWidth; this.height = window.innerHeight; this.canvas.width = this.width; this.canvas.height = this.height; } createSnowflakes() { const flakes = window.innerWidth / 4; this.snowflakes = []; for (let s = 0; s < flakes; s++) { this.snowflakes.push(new Snowflake()); } } update() { //清除原來上面的雪花 this.ctx.clearRect(0, 0, this.width, this.height); for (let flake of this.snowflakes) { //計算每一片雪花的新坐標 flake.update(); //在canvas上畫出雪花 this.ctx.save(); this.ctx.fillStyle = "#FFF"; this.ctx.beginPath(); this.ctx.arc(flake.x, flake.y, flake.radius, 0, Math.PI * 2); this.ctx.closePath(); this.ctx.globalAlpha = flake.alpha; this.ctx.fill(); this.ctx.restore(); } requestAnimationFrame(this.updateBound); } } new Snow();
到此,關于“怎么使用JS+Canvas實現雪花紛飛的場景”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。