canvas实现流线文本汇聚动画效果代码
代码语言:html
所属分类:动画
代码描述:canvas实现流线文本汇聚动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { background: black; overflow: hidden; } canvas { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } p, a { color: white; } p { max-width: 30%; padding: 20px; } </style> </head> <body > <canvas id="canvas1"></canvas> <canvas id="canvas1"></canvas> <script > const canvas = document.getElementById('canvas1'); const ctx = canvas.getContext('2d'); canvas.width = 1700; canvas.height = 500; // canvas settings ctx.fillStyle = 'white'; ctx.strokeStyle = 'white'; ctx.lineWidth = 1; ctx.letterSpacing = '30px'; class Particle { constructor(effect) { this.effect = effect; this.x = Math.floor(Math.random() * this.effect.width); this.y = Math.floor(Math.random() * this.effect.height); this.speedX; this.speedY; this.speedModifier = Math.floor(Math.random() * 2 + 1); this.history = [{ x: this.x, y: this.y }]; this.maxLength = Math.floor(Math.random() * 40 + 10); this.angle = 0; this.newAngle = 0; this.angleCorrector = Math.random() * 0.5 + 0.01; this.timer = this.maxLength * 2; //this.colors = ['#7d0101', '#ad0303', '#db0202', '#ff0303', '#fc2323', '#fc4747', '#fc7e7e', 'white']; //this.colors = ['#f8dc3d', '#f8dc3d', '#f2d322', '#c9ad08', '#917d03', '#574a00', '#fae678', '#fcee9f', '#fff7c7','white']; this.colors = ['rgb(255,255,0)']; this.color = this.colors[Math.floor(Math.random() * this.colors.length)]; } draw(context) { context.beginPath(); context.moveTo(this.history[0].x, this.history[0].y); for (let i = 0; i < this.history.length; i++) { context.lineTo(this.history[i].x, this.history[i].y); } context.strokeStyle = this.color; context.stroke(); } update() { this.timer--; if (this.timer >= 1) { let x = Math.floor(this.x / this.effect.cellSize); let y = Math.floor(this.y / this.effect.cellSize); let index = y * this.effect.cols + x; if (this.effect.flowField[index]) { this.newAngle = this.effect.flowField[index].colorAngle; if (this.angle > this.newAngle) { this.angle -= this.angleCorrector; } else if (this.angle < this.newAngle) { this.angle += this.angleCorrector; } else { this.angle = this.newAngle; } } .........完整代码请登录后点击上方下载按钮下载查看
网友评论0