vector实现粒子线条绘制canvas动画效果代码
代码语言:html
所属分类:动画
代码描述:vector实现粒子线条绘制canvas动画效果代码
代码标签: vector 粒子 线条 绘制 canvas 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style> html, body { margin: 0; } body { overflow: hidden; } canvas { position: absolute; } </style> </head> <body> <canvas id="canvas-bottom"></canvas> <canvas id="canvas-top"></canvas> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/vector.js"></script> <script> (function(){ 'use strict'; // Configuration options var opts = { background: 'black', numberOrbs: 100, // increase with screen size. 50 to 100 for my 2560 x 1400 monitor maxVelocity: 2.5, // increase with screen size--dramatically affects line density. 2-3 for me orbRadius: 1, // keep small unless you really want to see the dots bouncing. I like <= 1. minProximity: 100, // controls how close dots have to come to each other before lines are traced initialColorAngle: 7, // initialize the color angle, default = 7 colorFrequency: 0.3, // 0.3 default colorAngleIncrement: 0.009, // 0.009 is slow and even globalAlpha: 0.010, //controls alpha for lines, but not dots (despite the name) manualWidth: false, // Default: false, change to your own custom width to override width = window.innerWidth. Yes i know I'm mixing types here, sue me. manualHeight: false// Default: false, change to your own custom height to override height = window.innerHeight }; // Canvas globals var canvasTop, linecxt, canvasBottom, cxt, width, height, animationFrame; // Global objects var orbs; // Orb object - these are the guys that bounce around the screen. // We will draw lines between these dots, but that behavior is found // in the Orbs container object var Orb = (function() { // Constructor function Orb(radius, color) { var posX = randBetween(0, width); var posY = randBetween(0, height); this.position = new Vector(posX, posY); var velS = randBetween(0, opts.maxVelocity); // Velocity scalar this.velocity = Vector.randomDirection().multiply(velS).noZ(); this.radius = radius; this.color = color; } // Orb methods Orb.prototype = { update: function() { // position = position + velocity this.position = this.position.add(this.velocity); // bounce if the dot reaches the edge of the container. // this can be EXTREMELY buggy with large dot radiuses, but it works for this // drawing. if (this.position.x + this.radius >= width || this.position.x - this.radius <= 0) { this.velocity.x = this.velocity.x * -1; } if (this.position.y + this.radius >= height || this.position.y - this.radius <= 0) { this.velocity.y = this.velocity.y * -1; } }, display: function() { cxt.beginPath(); cxt.fillStyle = this.color; cxt.ellipse(this.position.x, this.position.y, this.radius, this.radius, 0, 0, 2*Math.PI, false); cxt.fill(); cxt.closePath(); }, run: function() { this.update(); this.display(); } }; return Orb; })(); // Orbs object - this is a container that manages all of the individual Orb objects. // In addition, this object holds the color phasing and line-drawing functionality, // since it already iterates over all the orbs once per frame anyway. var Orbs = (function() { // Constructor function Orbs(numberOrbs, radius, initialColorAngle, globalAlpha, colorAngleIncrement, colorFrequency) { this.orbs = []; this.colorAngle = initialColorAngle; this.colorAngleIncrement = colorAngleIncrement; this.globalAlpha = globalAlpha; this.colorFrequency = colorFrequency; this.color = null; for (var i = 0; i < numberOrbs; i++) { this.orbs.push(new Orb(radius, this.color)); } } Orbs.prototype = { run: function() { this.phaseColor(); for (var i = 0; i < this.orbs.length; i++) { for (var j = i + 1; j < this.orbs.length; j++) { // we .........完整代码请登录后点击上方下载按钮下载查看
网友评论0