基于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 的坐标位置,确保流星在正确位置生成。

相关推荐
Mr Xu_5 分钟前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
未来龙皇小蓝8 分钟前
RBAC前端架构-01:项目初始化
前端·架构
程序员agions17 分钟前
2026年,微前端终于“死“了
前端·状态模式
万岳科技系统开发17 分钟前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
程序员猫哥_24 分钟前
HTML 生成网页工具推荐:从手写代码到 AI 自动生成网页的进化路径
前端·人工智能·html
龙飞0525 分钟前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
我爱加班、、30 分钟前
Websocket能携带token过去后端吗
前端·后端·websocket
AAA阿giao30 分钟前
从零拆解一个 React + TypeScript 的 TodoList:模块化、数据流与工程实践
前端·react.js·ui·typescript·前端框架
杨超越luckly37 分钟前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
hedley(●'◡'●)1 小时前
基于cesium和vue的大疆司空模仿程序
前端·javascript·vue.js·python·typescript·无人机