基于HTML 使用星辰拼出爱心,并附带闪烁+流星+点击生成流星
代码文件:「基于html实现流星+星辰」,链接:https://pan.quark.cn/s/59679c01ebc5
核心功能概述
该代码实现了以下主要功能:
- 动态星空背景:包含闪烁的随机星星和特定图案(心形)排列的星星
- 流星动画效果:随机生成流星划过屏幕,带有轨迹和光晕效果
- 交互式体验:点击画布任意位置可生成流星
- 响应式设计:自动适应窗口大小变化
技术实现分析
基础设置
代码首先获取 Canvas 元素并设置其上下文,通过 resizeCanvas
函数确保画布尺寸与窗口大小一致:
const canvas = document.getElementById('meteorCanvas');
const ctx = canvas.getContext('2d');function resizeCanvas() {canvas.width = window.innerWidth;canvas.height = window.innerHeight;
}
星空系统
星空系统由两部分组成:随机背景星星和图案星星。初始化函数 initStars
创建两种类型的星星:
- 图案星星:通过数学公式生成心形图案的点,添加适当随机偏移使分布更自然
- 背景星星:随机分布在整个画布上的星星
所有星星都具有闪烁效果,通过改变透明度实现,闪烁速度和方向各不相同,增强视觉层次感。
流星系统
流星系统包含以下关键组件:
- 随机生成流星:
createMeteor
函数从屏幕左侧或上方随机位置生成流星,向右下方飞行 - 点击生成流星:
createMeteorAtPosition
函数允许用户在点击位置创建流星 - 定时生成:
scheduleMeteors
函数以随机间隔(0.5-1.5秒)自动生成流星 - 动态渲染:
drawMeteors
函数处理流星的运动轨迹、透明度渐变和消失逻辑
流星视觉效果通过以下技术实现:
- 使用线性渐变创建流星头部亮、尾部渐隐的效果
- 添加光晕效果增强视觉冲击力
- 流星轨迹通过数学计算确保自然流畅的运动路径
动画循环
动画通过 requestAnimationFrame
实现高效循环渲染:
function animate() {// 清空画布ctx.fillStyle = 'black';ctx.fillRect(0, 0, canvas.width, canvas.height);// 绘制星星和流星drawStars();drawMeteors();// 请求下一帧requestAnimationFrame(animate);
}
图案生成技术
代码中实现了一个灵活的图案生成系统,通过数学公式计算点坐标:
function getPatternPoints(patternType, centerX, centerY, size) {// 使用参数方程生成心形图案点for (let t = 0; t <= Math.PI * 2; t += 0.05) {const x = 20 * Math.pow(Math.sin(t), 3);const y = 15 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t);// 缩放并定位点}
}
用户交互设计
用户交互通过鼠标点击事件实现,点击后会在点击位置生成1-3个流星,使用 setTimeout
添加延迟使效果更自然。点击事件监听器获取相对于 Canvas 的坐标位置,确保流星在正确位置生成。