canvas实现跟随鼠标移动的海洋多足生物交互动画效果代码
代码语言:html
所属分类:动画
代码描述:canvas实现跟随鼠标移动的海洋多足生物交互动画效果代码
代码标签: canvas 跟随 鼠标 移动 海洋 多足 生物 交互 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> body { margin: 0; overflow: hidden; background: #000; font-family: 'Courier New', monospace; } canvas { display: block; } </style> </head> <body translate="no"> <canvas id="canvas"></canvas> <script > const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); canvas.width = window.innerWidth; canvas.height = window.innerHeight; ctx.imageSmoothingEnabled = true; ctx.imageSmoothingQuality = 'high'; const channel = new BroadcastChannel("alien-core"); let isMainWindow = document.hasFocus(); let windowId = Math.random().toString(36).substr(2, 9); let lastMoveTime = Date.now(); window.addEventListener("focus", () => { isMainWindow = true; channel.postMessage({ type: "window-focus", id: windowId, timestamp: Date.now() }); }); window.addEventListener("blur", () => { isMainWindow = false; }); const localCore = { x: canvas.width / 2, y: canvas.height / 2, radius: 40, vx: 0, vy: 0, energyBoost: 0 }; let targetX = localCore.x; let targetY = localCore.y; const remoteCores = new Map(); const detachedElements = []; let passEffect = { isActive: false, progress: 0, direction: 1, startTime: 0, duration: 2000 }; let energyBridge = { isActive: false, progress: 0, startTime: 0, duration: 3000, particles: [] }; class Tentacle { constructor(core, angle) { this.core = core; this.angle = angle; this.segments = []; this.length = 30; // más corto y más ágil this.segmentLength = 10; // más pequeño this.animation = Math.random() * 100; this.gradient = null; for (let i = 0; i < this.length; i++) { this.segments.push({ x: core.x, y: core.y, offset: i * 0.3 + Math.random() * 0.5 // offsets únicos }); } } update() { this.animation += 0.06 + localCore.energyBoost * 0.06; let prevX = this.core.x; let prevY = this.core.y; for (let i = 0; i < this.length; i++) { const segment = this.segments[i]; const wave = Math.sin(this.animation + segment.offset) * (12 + localCore.energyBoost * 18) + Math.cos(this.animation * 0.5 + segment.offset) * 8; const targetX = prevX + Math.cos(this.angle) * this.segmentLength + wave * 0.25; const targetY = prevY + Math.sin(this.angle) * this.segmentLength + wave * 0.25; segment.x += (targetX - segment.x) * 0.45; segment.y += (targetY .........完整代码请登录后点击上方下载按钮下载查看
网友评论0