canvas实现鼠标单击长剑刺破气泡破碎粒子动画代码

代码语言:html

所属分类:动画

代码描述:canvas实现鼠标单击长剑刺破气泡破碎粒子动画代码

代码标签: canvas 鼠标 单击 长剑 刺破 气泡 破碎 粒子 动画 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>剑破气泡</title>
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        body {
            overflow: hidden;
            background: #060810;
            cursor: crosshair;
        }
        canvas { display: block; }
        #hint {
            position: fixed;
            bottom: 36px;
            left: 50%;
            transform: translateX(-50%);
            color: rgba(160, 200, 240, 0.5);
            font-family: serif;
            font-size: 14px;
            letter-spacing: 6px;
            pointer-events: none;
            transition: opacity 0.6s;
            text-shadow: 0 0 16px rgba(100, 180, 255, 0.25);
            white-space: nowrap;
        }
    </style>
</head>
<body>
    <canvas id="canvas"></canvas>
    <div id="hint">点击任意位置 · 释放利剑</div>

    <script>
    const canvas = document.getElementById('canvas');
    const ctx = canvas.getContext('2d');
    const hint = document.getElementById('hint');

    /* ========== 所有变量声明在最前面,避免 TDZ ========== */
    let W = 0, H = 0;
    let time = 0;
    let flashOpacity = 0;
    let shakeIntensity = 0;
    let resetCountdown = -1;

    const STATE = { IDLE: 0, SWORD_FLYING: 1, BURST: 2 };
    let state = STATE.IDLE;

    let stars = [];
    let bubble = null;
    let sword = null;
    let fragments = [];
    let waterDrops = [];
    let sparkles = [];
    let glowOrbs = [];
    let shockwaves = [];
    let trailParts = [];
    let mouseX = 0, mouseY = 0;

    /* ========== 工具函数 ========== */
    function easeOutElastic(t) {
        if (t <= 0) return 0;
        if (t >= 1) return 1;
        return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * (2 * Math.PI) / 0.3) + 1;
    }

    /* ========== 星空背景 ========== */
    function initStars() {
        stars = [];
        for (let i = 0; i < 180; i++) {
            stars.push({
                x: Math.random() * W,
                y: Math.random() * H,
                r: Math.random() * 1.4 + 0.3,
                alpha: Math.random() * 0.4 + 0.15,
                speed: Math.random() * 0.003 + 0.001,
                phase: Math.random() * Math.PI * 2
            });
        }
    }

    /* =.........完整代码请登录后点击上方下载按钮下载查看

网友评论0