<!-- CODE = #A050 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>NETBYZZ A050</title> <link rel="stylesheet" href="style.css"> </head> <body> <script src="//cdnjs.cloudflare.com/ajax/libs/dat-gui/0.5/dat.gui.min.js" type="text/javascript" ></script> <canvas id="canvas"></canvas> <div class="title">move your mouse</div> <script src="script.js"></script> </body> </html>
html, body { margin: 0px; background: #f09819; /* fallback for old browsers */ background: -webkit-radial-gradient(#00d2ff, #3a7bd5); /* Chrome 10-25, Safari 5.1-6 */ background: radial-gradient(#00d2ff, #3a7bd5); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ } canvas { display: block; } .title { color: #fff; position: absolute; top: 8px; left: 12px; font-family: verdana; text-transform: uppercase; font-size: 10px; font-weight: bold; }
var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; var cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame; var rAF; var canvas = document.getElementById("canvas"), context = canvas.getContext("2d"), width = (canvas.width = window.innerWidth), height = (canvas.height = window.innerHeight), particles = [], mouseX = 0, mouseY = 0, total = 15, followSpeed = 0.1, size = 25; document.body.addEventListener("mousemove", function (event) { mouseX = event.clientX; mouseY = event.clientY; }); window.addEventListener("resize", function () { width = canvas.width = window.innerWidth; height = canvas.height = window.innerHeight; }); function init() { cancelAnimationFrame(rAF); particles = []; for (var i = 0; i < total; i += 1) { particles.push(new Particle(i)); } draw(); } function draw() { context.clearRect(0, 0, width, height); for (var i = 0; i < total; i += 1) { particles[i].update(); } rAF = requestAnimationFrame(draw); } /** * Particle */ var Particle, p; Particle = function (index) { this.initialize(index); }; p = Particle.prototype; p.initialize = function (index) { this.x = -50; this.y = height; this.id = index + 1; this.angleX = Math.PI * 2 * Math.random(); this.angleY = Math.PI * 2 * Math.random(); this.speedX = 0.03 * Math.random() + 0.03; this.speedY = 0.03 * Math.random() + 0.03; this.radius = 150; return this; }; p.update = function () { var aim, dx, dy, scale, angle; if (this.id > 1) { aim = particles[this.id - 1 - 1]; dx = aim.x - this.x; dy = aim.y - this.y; this.x += dx * con.speed; this.y += dy * con.speed; } else { if (mouseX === 0 && mouseY === 0) { dx = width / 2 + Math.cos(this.angleX) * this.radius - this.x; dy = height / 2 + Math.sin(this.angleY) * this.radius - this.y; this.x = width / 2 + Math.cos(this.angleX) * this.radius; this.y = height / 2 + Math.sin(this.angleY) * this.radius; this.angleX += this.speedX; this.angleY += this.speedY; } else { dx = mouseX - this.x; dy = mouseY - this.y; this.x += dx * con.speed; this.y += dy * con.speed; } } angle = Math.atan2(dy, dx); scale = Math.cos((Math.PI / 2) * (this.id / total)); context.save(); context.translate(this.x, this.y); context.rotate(angle); context.scale(scale, scale); context.beginPath(); context.moveTo((-size / 2) * 1.732, -size / 2); context.lineTo(0, 0); context.lineTo((-size / 2) * 1.732, size / 2); context.lineTo((-size / 2) * 1.2, 0); context.fillStyle = "white"; context.fill(); context.restore(); }; // control bar var ControlBar = function () { this.num = total; this.speed = followSpeed; }; var con = new ControlBar(); var gui = new dat.GUI(); var conSpeed = gui.add(con, "speed", 0.05, 0.25).step(0.05); var conNum = gui.add(con, "num", 10, 30).step(1); conNum.onFinishChange(function (value) { total = value; init(); }); init();