基于HTML 使用星辰拼出爱心,并附带闪烁+流星+点击生成流星

代码文件:「基于html实现流星+星辰」,链接:https://pan.quark.cn/s/59679c01ebc5

核心功能概述

该代码实现了以下主要功能:

  1. 动态星空背景:包含闪烁的随机星星和特定图案(心形)排列的星星
  2. 流星动画效果:随机生成流星划过屏幕,带有轨迹和光晕效果
  3. 交互式体验:点击画布任意位置可生成流星
  4. 响应式设计:自动适应窗口大小变化

技术实现分析

基础设置

代码首先获取 Canvas 元素并设置其上下文,通过 resizeCanvas 函数确保画布尺寸与窗口大小一致:

javascript 复制代码
const canvas = document.getElementById('meteorCanvas');
const ctx = canvas.getContext('2d');

function resizeCanvas() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
}

星空系统

星空系统由两部分组成:随机背景星星和图案星星。初始化函数 initStars 创建两种类型的星星:

  1. 图案星星:通过数学公式生成心形图案的点,添加适当随机偏移使分布更自然
  2. 背景星星:随机分布在整个画布上的星星

所有星星都具有闪烁效果,通过改变透明度实现,闪烁速度和方向各不相同,增强视觉层次感。

流星系统

流星系统包含以下关键组件:

  1. 随机生成流星createMeteor 函数从屏幕左侧或上方随机位置生成流星,向右下方飞行
  2. 点击生成流星createMeteorAtPosition 函数允许用户在点击位置创建流星
  3. 定时生成scheduleMeteors 函数以随机间隔(0.5-1.5秒)自动生成流星
  4. 动态渲染drawMeteors 函数处理流星的运动轨迹、透明度渐变和消失逻辑

流星视觉效果通过以下技术实现:

  • 使用线性渐变创建流星头部亮、尾部渐隐的效果
  • 添加光晕效果增强视觉冲击力
  • 流星轨迹通过数学计算确保自然流畅的运动路径

动画循环

动画通过 requestAnimationFrame 实现高效循环渲染:

javascript 复制代码
function animate() {
    // 清空画布
    ctx.fillStyle = 'black';
    ctx.fillRect(0, 0, canvas.width, canvas.height);

    // 绘制星星和流星
    drawStars();
    drawMeteors();

    // 请求下一帧
    requestAnimationFrame(animate);
}

图案生成技术

代码中实现了一个灵活的图案生成系统,通过数学公式计算点坐标:

javascript 复制代码
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 的坐标位置,确保流星在正确位置生成。

相关推荐
i听风逝夜18 小时前
Web 3D地球实时统计访问来源
前端·后端
iMonster18 小时前
React 组件的组合模式之道 (Composition Pattern)
前端
呐呐呐呐呢18 小时前
antd渐变色边框按钮
前端
元直数字电路验证19 小时前
Jakarta EE Web 聊天室技术梳理
前端
wadesir19 小时前
Nginx配置文件CPU优化(从零开始提升Web服务器性能)
服务器·前端·nginx
牧码岛19 小时前
Web前端之canvas实现图片融合与清晰度介绍、合并
前端·javascript·css·html·web·canvas·web前端
灵犀坠19 小时前
前端面试八股复习心得
开发语言·前端·javascript
9***Y4819 小时前
前端动画性能优化
前端
网络点点滴19 小时前
Vue3嵌套路由
前端·javascript·vue.js
牧码岛19 小时前
Web前端之Vue+Element打印时输入值没有及时更新dom的问题
前端·javascript·html·web·web前端