Forked from Keegan Brown's Pen Particles, Particles, Particles....
A Pen by Gregory Starr on CodePen.
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> | |
<script src="//cdnjs.cloudflare.com/ajax/libs/pixi.js/1.5.3/pixi.js"></script> | |
<script src="//cdnjs.cloudflare.com/ajax/libs/gsap/1.12.1/TweenMax.min.js"></script> | |
<div id="container"></div> |
Forked from Keegan Brown's Pen Particles, Particles, Particles....
A Pen by Gregory Starr on CodePen.
$(window).load( function () { | |
var mainw = $("#container").width(), | |
mainh = $("#container").height(), | |
mousex = Math.floor(mainw/2), | |
mousey = Math.floor(mainh/2); | |
$("#container").on("mousemove", function (e) { | |
mousex = e.pageX; | |
mousey = e.pageY; | |
}); | |
//asdfasdf | |
var stage = new PIXI.Stage(0xFFFFFF); | |
var renderer = PIXI.autoDetectRenderer( mainw, mainh ); | |
var world = []; | |
renderer.view.style.display = "block"; | |
// add render view to DOM | |
$("#container").append(renderer.view); | |
function randomNumber(min, max) { | |
return Math.floor(Math.random() * (1 + max - min) + min); | |
} | |
function Particle ( config, seed, stage ) { | |
this.config = config; | |
this.x = config.x; | |
this.y = config.y; | |
this.seed = seed; | |
this.radius = config.radius; | |
this.color = config.color; | |
this.graphics = initGraphics( stage, this ); | |
this.tween = addParticleTween(this, seed, 1); | |
} | |
Particle.prototype.draw = function () { | |
this.graphics.x = this.x; | |
this.graphics.y = this.y; | |
//console.log(this.graphics.x); | |
} | |
function initGraphics ( stage, _self ) { | |
var _graphics = new PIXI.Graphics(); | |
var rgb = _self.color.b | (_self.color.g << 8) | (_self.color.r << 16); | |
_graphics.beginFill( rgb, _self.color.a ); | |
_graphics.drawCircle( 0, 0, _self.radius ); | |
_graphics.endFill(); | |
_graphics.cacheAsBitmap = true; | |
stage.addChild(_graphics); | |
return _graphics; | |
} | |
function generateParticles (stage) { | |
for (i = 0; i < 400; i++) { | |
var radius = Math.ceil(Math.random() * 7); | |
var _p = new Particle({ | |
x: randomNumber(0, mainw), | |
y: randomNumber(0, mainh), | |
radius: radius, | |
color: { | |
r: randomNumber(0, 140), | |
g: randomNumber(133, 198), | |
b: 255, | |
a: ((Math.random()*0.3)+0.7) | |
} | |
}, i, stage); | |
world.push(_p); | |
} | |
} | |
function addParticleTween ( _self, seed, dir ) { | |
var _x = mousex; | |
var _y = mousey; | |
var _a = 1; | |
var _ease = Power1.easeIn; | |
if ( dir < 0 ) { | |
_ease = Power1.easeOut; | |
_x = _self.config.x; | |
_y = _self.config.y; | |
_a = 0.2; | |
} else { | |
//var _angle = getAngleVector( Math.random(), 10 ); | |
_self.config.x = _self.x+((Math.random()*100)-50); | |
_self.config.y = _self.y+((Math.random()*100)-50); | |
} | |
TweenMax.to( | |
_self, | |
1, | |
{ | |
delay: seed*0.001, | |
x: _x, | |
y: _y, | |
fillAlpha: _a, | |
ease: _ease, | |
onComplete: addParticleTween, | |
onCompleteParams: [ _self, seed, dir*-1 ] | |
} | |
); | |
} | |
function getAngleVector (angle, dist) { | |
var _y = Math.sin(angle) * dist; | |
var _x = Math.cos(angle) * dist; | |
return [_x, _y]; | |
} | |
TweenLite.ticker.addEventListener("tick", go); | |
var test = 0; | |
function go() { | |
for ( var i = 0, len = world.length; i < len; i++ ) { | |
world[i].draw(); | |
} | |
if ( test < 10 ) { | |
console.log( world[0] ); | |
test++; | |
} | |
renderer.render(stage); | |
} | |
generateParticles(stage); | |
}); |
html,body{ | |
margin:0; | |
padding:0; | |
min-height: 1000px; | |
height:100%; | |
width:100%; | |
} | |
#container, #container canvas { | |
margin:0; | |
padding:0; | |
height:100%; | |
width:100%; | |
display:block; | |
} |