| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
-
- let max_particles = 100;
- let particles = [];
- let frequency = 100;
- let init_num = max_particles;
- let max_time = frequency * max_particles;
- let time_to_recreate = false;
- // Enable repopolate
- setTimeout(function () {
- time_to_recreate = true;
- }.bind(this), max_time)
- // Popolate particles
- popolate(max_particles);
- var tela = document.createElement('canvas');
- tela.width = $(window).width();
- tela.height = $(window).height();
- $("body").append(tela);
- var canvas = tela.getContext('2d');
- class Particle {
- constructor(canvas, options) {
- let colors = ["#feea00", "#a9df85", "#5dc0ad", "#ff9a00", "#fa3f20"]
- let types = ["full", "fill", "empty"]
- this.random = Math.random()
- this.canvas = canvas;
- this.progress = 0;
- this.x = ($(window).width() / 2) + (Math.random() * 200 - Math.random() * 200)
- this.y = ($(window).height() / 2) + (Math.random() * 200 - Math.random() * 200)
- this.w = $(window).width()
- this.h = $(window).height()
- this.radius = 1 + (8 * this.random)
- this.type = types[this.randomIntFromInterval(0, types.length - 1)];
- this.color = colors[this.randomIntFromInterval(0, colors.length - 1)];
- this.a = 0
- this.s = (this.radius + (Math.random() * 1)) / 10;
- //this.s = 12 //Math.random() * 1;
- }
- getCoordinates() {
- return {
- x: this.x,
- y: this.y
- }
- }
- randomIntFromInterval(min, max) {
- return Math.floor(Math.random() * (max - min + 1) + min);
- }
- render() {
- // Create arc
- let lineWidth = 0.2 + (2.8 * this.random);
- let color = this.color;
- switch (this.type) {
- case "full":
- this.createArcFill(this.radius, color)
- this.createArcEmpty(this.radius + lineWidth, lineWidth / 2, color)
- break;
- case "fill":
- this.createArcFill(this.radius, color)
- break;
- case "empty":
- this.createArcEmpty(this.radius, lineWidth, color)
- break;
- }
- }
- createArcFill(radius, color) {
- this.canvas.beginPath();
- this.canvas.arc(this.x, this.y, radius, 0, 2 * Math.PI);
- this.canvas.fillStyle = color;
- this.canvas.fill();
- this.canvas.closePath();
- }
- createArcEmpty(radius, lineWidth, color) {
- this.canvas.beginPath();
- this.canvas.arc(this.x, this.y, radius, 0, 2 * Math.PI);
- this.canvas.lineWidth = lineWidth;
- this.canvas.strokeStyle = color;
- this.canvas.stroke();
- this.canvas.closePath();
- }
- move() {
- this.x += Math.cos(this.a) * this.s;
- this.y += Math.sin(this.a) * this.s;
- this.a += Math.random() * 0.4 - 0.2;
- if (this.x < 0 || this.x > this.w - this.radius) {
- return false
- }
- if (this.y < 0 || this.y > this.h - this.radius) {
- return false
- }
- this.render()
- return true
- }
- calculateDistance(v1, v2) {
- let x = Math.abs(v1.x - v2.x);
- let y = Math.abs(v1.y - v2.y);
- return Math.sqrt((x * x) + (y * y));
- }
- }
- /*
- * Function to clear layer canvas
- * @num:number number of particles
- */
- function popolate(num) {
- for (var i = 0; i < num; i++) {
- setTimeout(
- function (x) {
- return function () {
- // Add particle
- particles.push(new Particle(canvas))
- };
- }(i)
- , frequency * i);
- }
- return particles.length
- }
- function clear() {
- // canvas.globalAlpha=0.04;
- canvas.fillStyle = '#111111';
- canvas.fillRect(0, 0, tela.width, tela.height);
- // canvas.globalAlpha=1;
- }
- function connection() {
- let old_element = null
- $.each(particles, function (i, element) {
- if (i > 0) {
- let box1 = old_element.getCoordinates()
- let box2 = element.getCoordinates()
- canvas.beginPath();
- canvas.moveTo(box1.x, box1.y);
- canvas.lineTo(box2.x, box2.y);
- canvas.lineWidth = 0.45;
- canvas.strokeStyle = "#3f47ff";
- canvas.stroke();
- canvas.closePath();
- }
- old_element = element
- })
- }
- /*
- * Function to update particles in canvas
- */
- function update() {
- clear();
- connection()
- particles = particles.filter(function (p) { return p.move() })
- // Recreate particles
- if (time_to_recreate) {
- if (particles.length < init_num) { popolate(1); }
- }
- requestAnimationFrame(update.bind(this))
- }
- update();
|