var console = function() {
consoleDiv = document.getElementById('console');
para = document.createElement('p');
text = document.createTextNode(msg);
consoleDiv.appendChild(para);
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var img = document.getElementById('myImg');
var distRepulsion = 3000;
Particle = function(x,y,absPosition){
this.initX = this.currentX = this.targetX = x;
this.initY = this.currentY = this.targetY = y;
this.repulse = function(cx,cy){
var dx = (cx-this.currentX);
var dy = (cy-this.currentY);
var dist = Math.pow(dx,2) + Math.pow(dy,2);
if (dist < distRepulsion){
this.vx += (this.initX - this.currentX)*.1;
this.vy += (this.initY - this.currentY)*.1;
if (Math.abs(this.vx)<.1 && Math.abs(this.yv)<.1){
this.currentX = this.initX;
this.currentY = this.initY;
this.currentX = Math.round(this.currentX+this.vx);
this.currentY = Math.round(this.currentY+this.vy);
window.onload = function() {
document.onmousemove = handleMouseMove;
context.drawImage(img, 0, 0 );
myData = context.getImageData(0, 0, img.width, img.height);
rectCanvas = canvas.getBoundingClientRect();
requestAnimationFrame(loop);
function handleMouseMove(event){
mouseX = event.clientX - rectCanvas.left;
mouseY = event.clientY - rectCanvas.top;
for (var i = 0 ; i < n; i += (4*skip)) {
var particle = new Particle(pCount%canvas.width, Math.floor(pCount/canvas.width),pCount);
particles.push(particle);
nParticles = particles.length;
distRepulsion = 2500 + Math.sin(cycleDist)*1000;
var newData = context.createImageData(canvas.width, canvas.height);
if (mouseX > canvas.width){
if (mouseY > canvas.height){
for (var i=0; i<nParticles; i++ ){
p.repulse(mouseX,mouseY);
var pos = ((p.currentY*canvas.width)+p.currentX)*4;
newData.data[pos] += 196;
newData.data[pos+1] += 154;
newData.data[pos+2] += 108;
newData.data[pos+3] += 255;
context.putImageData(newData,0,0);
requestAnimationFrame(loop);