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

相关推荐
喜欢打篮球的普通人14 小时前
LLVM 前端与优化层:Clang 如何把 C 代码变成 IR
c语言·前端·状态模式
大文说跨境14 小时前
亚马逊多店铺用过多款指纹浏览器,说点长期用的实际感受
前端·网络
中屹指纹浏览器svip15 小时前
中屹指纹浏览器和普通 Chrome 有什么区别?
前端·chrome·中屹指纹浏览器
feixing_fx15 小时前
CSS Grid 入门:二维布局时代的降维打击
前端·css·前端框架·css3
Lank_M15 小时前
JPG的8×8块里只要有条边,白底就保不住255
前端
coding漫漫长路15 小时前
主图纯白检测,阈值放宽到250会放过252的底
前端
计算机魔术师15 小时前
藏了八个月没被当漏洞的洞,AI红队一晚上翻出来了
前端
用户831348593069815 小时前
Vue3 v-for:常用用法与开发高频坑点
前端·javascript·vue.js
用户6210075870215 小时前
Web 3D 开发实践:BIM+GIS 融合需要解决哪些技术问题?
前端·three.js
志尊宝15 小时前
AI原生前端开发(017):端侧AI与Vue 3结合实战
前端·人工智能·prompt·1024·ai-native