Difference between revisions of "Template:Cologne-Duesseldorf/particles"

Line 1: Line 1:
 
(function() {
 
(function() {
   var particlesQuantity = 300,
+
   var particlesQuantity = 100,
      velocity = 1,
+
    velocity = 0.3,
      maxRadius = 4,
+
    maxRadius = 20;
      matrixField = 50,
+
 
      matrixVel = 10;
+
   var canvas = document.getElementById("canvas"),
 
+
    context,
   var canvas = document.getElementById('canvas'),
+
    particles = [];
      context,
+
 
      particles = [],
+
      mouse = {x:0,y:0};
+
+
 
   if (canvas && canvas.getContext) {
 
   if (canvas && canvas.getContext) {
     context = canvas.getContext('2d');
+
     context = canvas.getContext("2d");
   
+
 
     for (var i=0; i < particlesQuantity; i++) {
+
     for (var i = 0; i < particlesQuantity; i++) {
       var gray = Math.round(Math.random()*255);
+
       var alpha = Math.random();
     
+
 
 
       particles.push({
 
       particles.push({
         x: Math.round(Math.random()*window.innerWidth),
+
         x: Math.round(Math.random() * window.innerWidth),
         y: Math.round(Math.random()*window.innerHeight),
+
         y: Math.round(Math.random() * window.innerHeight),
         velx: Math.random()*velocity*2 - velocity,
+
         velx: Math.random() * velocity * 2 - velocity,
         vely: Math.random()*velocity*2 - velocity,
+
         vely: Math.random() * velocity * 2 - velocity,
         radius: Math.round(Math.random()*maxRadius),
+
         radius: (1 - alpha) * maxRadius,
         color: 'rgb(' + [gray,gray,gray].join(',') + ')'
+
         color: "rgba(" + [20, 147, 117, alpha].join(",") + ")"
 
       });
 
       });
    }
+
    }
 
+
 
     initialize();
 
     initialize();
 
   }
 
   }
 
+
 
 
   function resizeCanvas() {
 
   function resizeCanvas() {
 
     canvas.width = window.innerWidth;
 
     canvas.width = window.innerWidth;
 
     canvas.height = window.innerHeight;
 
     canvas.height = window.innerHeight;
 
   }
 
   }
 
+
 
  function mouseMove(e) {
+
    mouse.x = e.layerX;
+
    mouse.y = e.layerY;
+
  }
+
 
+
 
   function render() {
 
   function render() {
     context.clearRect(0,0,window.innerWidth,window.innerHeight);
+
     context.clearRect(0, 0, window.innerWidth, window.innerHeight);
   
+
 
     var particle,
+
     var particle, len = particles.length;
        len = particles.length;
+
 
   
+
     for (var i = 0; i < len; i++) {
     for (var i=0; i < len; i++) {
+
 
       particle = particles[i];
 
       particle = particles[i];
     
+
       if (particle.x < 0) {
       if (!particle.frozen) {
+
        particle.velx = velocity + Math.random();
        if (particle.x < 0) {
+
      } else if (particle.x > window.innerWidth) {
          particle.velx = velocity + Math.random();
+
        particle.velx = -velocity - Math.random();
        } else if (particle.x > window.innerWidth) {
+
      }
          particle.velx = -velocity - Math.random();
+
 
        }  
+
      if (particle.y < 0) {
       
+
        particle.vely = velocity + Math.random();
        if (particle.y < 0) {
+
      } else if (particle.y > window.innerHeight) {
          particle.vely = velocity + Math.random();
+
        particle.vely = -velocity - Math.random();
        } else if (particle.y > window.innerHeight) {
+
          particle.vely = -velocity - Math.random();
+
        }
+
       
+
        var distance = distanceBetween(mouse,particle);
+
        if (distance < matrixField) {
+
          particle.x += particle.velx/matrixVel;
+
          particle.y += particle.vely/matrixVel;
+
          } else {
+
          particle.x += particle.velx;
+
          particle.y += particle.vely;
+
        }
+
 
       }
 
       }
   
+
      particle.x += particle.velx;
 +
      particle.y += particle.vely;
 +
 
 +
 
 
       context.fillStyle = particle.color;
 
       context.fillStyle = particle.color;
 
       context.beginPath();
 
       context.beginPath();
       context.arc(particle.x,particle.y,particle.radius,0,Math.PI*2,true);
+
       context.arc(
       //context.lineWidth = 2;
+
        particle.x,
      //context.stroke();
+
        particle.y,
 +
        particle.radius,
 +
        0,
 +
        Math.PI * 2,
 +
        true
 +
       );
 
       context.closePath();
 
       context.closePath();
 
       context.fill();
 
       context.fill();
 
     }
 
     }
   
+
 
 
     context.save();
 
     context.save();
    context.beginPath();
+
     context.restore();
    context.arc(mouse.x,mouse.y,matrixField*2,0,Math.PI*2,false);
+
    context.clip();
+
   
+
    context.beginPath();
+
    context.globalAlpha = 0.25;
+
    context.arc(mouse.x,mouse.y,matrixField,0,Math.PI*2,false);
+
    var grd = context.createRadialGradient(mouse.x, mouse.y, matrixField/5, mouse.x, mouse.y, matrixField);
+
    grd.addColorStop(0, '#ffffff');
+
    grd.addColorStop(1, '#808080');
+
    context.fillStyle = grd;
+
    context.shadowColor = 'black';
+
    context.shadowBlur = 10;
+
    context.shadowOffsetX = 0;
+
    context.shadowOffsetY = 0;
+
    context.fill();
+
   
+
     context.restore();  
+
 
   }
 
   }
 
+
 
   function mouseIn() {
+
   function distanceBetween(a, b) {
     var closestIndex = 0,
+
     var dx = Math.pow(a.x - b.x, 2),
        closestDistance = 1000,
+
       dy = Math.pow(a.y - b.y, 2);
        len = particles.length;
+
     return Math.sqrt(dx + dy);
   
+
    for (var i=0; i < len; i++) {
+
       var thisDistance = distanceBetween(particles[i],mouse);
+
      if (thisDistance < closestDistance) {
+
        closestDistance = thisDistance;
+
        closestIndex = i;
+
      }
+
     }
+
   
+
    if (closestDistance < particles[closestIndex].radius) {
+
      particles[closestDistance].frozen = true;
+
    }
+
   
+
 
   }
 
   }
 
+
 
  function distanceBetween(a,b) {
+
    var dx = Math.pow(a.x - b.x,2),
+
        dy = Math.pow(a.y - b.y,2);
+
    return Math.sqrt(dx+dy);
+
  }
+
 
+
 
   function initialize() {
 
   function initialize() {
    canvas.addEventListener('mousemove',mouseMove,false);
+
     window.addEventListener("resize", resizeCanvas, false);
     window.addEventListener('resize',resizeCanvas,false);
+
     window.requestAnimFrame = (function() {
    window.addEventListener('mousein',mouseIn,false);
+
       return (
     window.requestAnimFrame = (function(){
+
        window.requestAnimationFrame ||
       return window.requestAnimationFrame       ||
+
        window.webkitRequestAnimationFrame ||
              window.webkitRequestAnimationFrame ||
+
        window.mozRequestAnimationFrame ||
              window.mozRequestAnimationFrame   ||
+
        window.oRequestAnimationFrame ||
              window.oRequestAnimationFrame     ||
+
        window.msRequestAnimationFrame ||
              window.msRequestAnimationFrame     ||
+
        function(callback) {
              function( callback ){
+
          window.setTimeout(callback, 1000 / 60);
                window.setTimeout(callback, 1000 / 60);
+
        }
              };
+
      );
 
     })();
 
     })();
   
+
 
     (function animloop(){
+
     (function animloop() {
 
       requestAnimFrame(animloop);
 
       requestAnimFrame(animloop);
 
       render();
 
       render();
 
     })();
 
     })();
   
+
 
 
     resizeCanvas();
 
     resizeCanvas();
 
   }
 
   }
 
})();
 
})();

Revision as of 18:22, 31 October 2017

(function() {

 var particlesQuantity = 100,
   velocity = 0.3,
   maxRadius = 20;
 var canvas = document.getElementById("canvas"),
   context,
   particles = [];
 if (canvas && canvas.getContext) {
   context = canvas.getContext("2d");
   for (var i = 0; i < particlesQuantity; i++) {
     var alpha = Math.random();
     particles.push({
       x: Math.round(Math.random() * window.innerWidth),
       y: Math.round(Math.random() * window.innerHeight),
       velx: Math.random() * velocity * 2 - velocity,
       vely: Math.random() * velocity * 2 - velocity,
       radius: (1 - alpha) * maxRadius,
       color: "rgba(" + [20, 147, 117, alpha].join(",") + ")"
     });
   }
   initialize();
 }
 function resizeCanvas() {
   canvas.width = window.innerWidth;
   canvas.height = window.innerHeight;
 }
 function render() {
   context.clearRect(0, 0, window.innerWidth, window.innerHeight);
   var particle, len = particles.length;
   for (var i = 0; i < len; i++) {
     particle = particles[i];
     if (particle.x < 0) {
       particle.velx = velocity + Math.random();
     } else if (particle.x > window.innerWidth) {
       particle.velx = -velocity - Math.random();
     }
     if (particle.y < 0) {
       particle.vely = velocity + Math.random();
     } else if (particle.y > window.innerHeight) {
       particle.vely = -velocity - Math.random();
     }
     particle.x += particle.velx;
     particle.y += particle.vely;


     context.fillStyle = particle.color;
     context.beginPath();
     context.arc(
       particle.x,
       particle.y,
       particle.radius,
       0,
       Math.PI * 2,
       true
     );
     context.closePath();
     context.fill();
   }
   context.save();
   context.restore();
 }
 function distanceBetween(a, b) {
   var dx = Math.pow(a.x - b.x, 2),
     dy = Math.pow(a.y - b.y, 2);
   return Math.sqrt(dx + dy);
 }
 function initialize() {
   window.addEventListener("resize", resizeCanvas, false);
   window.requestAnimFrame = (function() {
     return (
       window.requestAnimationFrame ||
       window.webkitRequestAnimationFrame ||
       window.mozRequestAnimationFrame ||
       window.oRequestAnimationFrame ||
       window.msRequestAnimationFrame ||
       function(callback) {
         window.setTimeout(callback, 1000 / 60);
       }
     );
   })();
   (function animloop() {
     requestAnimFrame(animloop);
     render();
   })();
   resizeCanvas();
 }

})();