最近在研究前端動畫效果時,實現了一個超酷的流星雨特效,今天來和大家分享下具體實現過程。
1,整體實現思路
這個流星雨特效主要由 HTML、CSS 和 JavaScript 協同完成。HTML 搭建基礎結構,CSS 負責頁面樣式設計,JavaScript 實現星星和流星的動態效果。
效果展示:
用 HTML5 Canvas 和 JavaScript 實現流星雨特效
2,關鍵代碼解析
2.1 HTML 結構
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>流星雨特效</title><style>/* 省略CSS代碼 */</style>
</head><body><button id="fullscreenButton">全屏</button><canvas id="meteorCanvas"></canvas><audio id="backgroundMusic" loop><source src="background.mp3" type="audio/mpeg">Your browser does not support the audio element.</audio><script>/* 省略JavaScript代碼 */</script>
</body></html>
這里定義了一個全屏按鈕、用于繪制動畫的canvas畫布以及播放背景音樂的audio標簽。
2.2 CSS 樣式
body,
html {margin: 0;padding: 0;overflow: hidden;height: 100%;background: linear-gradient(to bottom, #000011, #000033);
}canvas {display: block;
}#fullscreenButton {position: absolute;bottom: 10px;right: 10px;z-index: 1000;padding: 5px 10px;background-color: rgba(255, 255, 255, 0.4);border: none;cursor: pointer;
}
通過 CSS 設置漸變背景模擬夜空,同時對canvas和按鈕的樣式進行布局,按鈕在右下角且有半透明背景。
2.3 JavaScript 核心邏輯
2.3.1 畫布設置
const canvas = document.getElementById("meteorCanvas");
const ctx = canvas.getContext("2d");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
獲取canvas元素及其繪圖上下文,并設置畫布尺寸與窗口一致。
2.3.2 星星類
class Star {constructor() {this.init();}init() {this.x = Math.random() * canvas.width;this.y = Math.random() * canvas.height;this.size = Math.