Last active
October 28, 2015 16:07
-
-
Save vinaychittora/fe047160a9113ce39db8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <style type="text/css"> | |
| /* Reset | |
| --------------------------------------------------------------------------------------- */ | |
| html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, | |
| del, dfn, font, img, ins, kbd, q, s, samp, small, strong, em, strike, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, | |
| table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; vertical-align: baseline; list-style-type: none;} | |
| html,body { | |
| overflow: hidden; width: 100%; height: 100%; | |
| } | |
| canvas { | |
| cursor: pointer; } | |
| </style> | |
| <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> | |
| </head> | |
| <body> | |
| <canvas id="canvas_logo" width="400" height="400"></canvas> | |
| <script> | |
| var Nodes = { | |
| // Settings | |
| density: 20, | |
| draw_distance: 0, | |
| baseRadius: 3, | |
| maxLineThickness: 4, | |
| reactionSensitivity: 0.5, | |
| lineThickness: 1, | |
| points: [], | |
| mouse: { x: -1000, y: -1000, down: false, move: false }, | |
| animation: null, | |
| canvas: null, | |
| context: null, | |
| imageInput: null, | |
| bgImage: null, | |
| bgCanvas: null, | |
| bgContext: null, | |
| bgContextPixelData: null, | |
| init: function() { | |
| // Set up the visual canvas | |
| this.canvas = document.getElementById('canvas_logo'); | |
| this.context = this.canvas.getContext( '2d' ); | |
| this.context.globalCompositeOperation = "lighter"; | |
| this.canvas.style.display = 'block'; | |
| this.canvas.addEventListener('mousemove', this.mouseMove, false); | |
| this.canvas.addEventListener('mousedown', this.mouseDown, false); | |
| this.canvas.addEventListener('mouseup', this.mouseUp, false); | |
| this.canvas.addEventListener('mouseout', this.mouseOut, false); | |
| // Init | |
| this.preparePoints(); | |
| this.draw(); | |
| this.wiggle(); | |
| var object_int = this; | |
| setInterval(function(){ | |
| object_int.wiggle(); | |
| }, 650); | |
| }, | |
| getRandomInt: function(min, max) { | |
| return Math.round(Math.random() * (max - min + 1)) + min; | |
| }, | |
| preparePoints: function() { | |
| this.points = []; | |
| var width, height, i, j; | |
| var color_list = ["210, 77, 87", "242, 38, 19", "217, 30, 24", "150, 40, 27", "239, 72, 54", "214, 69, 65", "192, 57, 43", "207, 0, 15", "231, 76, 60", "219, 10, 91", "246, 71, 71", "241, 169, 160", "210, 82, 127", "224, 130, 131", "246, 36, 89", "226, 106, 106", "220, 198, 224", "102, 51, 153", "103, 65, 114", "174, 168, 211", "145, 61, 136", "154, 18, 179", "191, 85, 236", "190, 144, 212", "142, 68, 173", "155, 89, 182", "68,108,179", "228, 241, 254", "65, 131, 215", "89, 171, 227", "129, 207, 224", "82, 179, 217", "197, 239, 247", "34, 167, 240", "52, 152, 219", "44, 62, 80", "25, 181, 254", "51, 110, 123", "34, 49, 63", "107, 185, 240", "30, 139, 195", "58, 83, 155", "52, 73, 94", "103, 128, 159", "37, 116, 169", "31, 58, 147", "137, 196, 244", "75, 119, 190", "92, 151, 191", "78,205,196", "162, 222, 208", "135, 211, 124", "144, 198, 149", "38, 166, 91", "3, 201, 169", "104, 195, 163", "101, 198, 187", "27, 188, 155", "27, 163, 156", "102, 204, 153", "54, 215, 183", "200, 247, 197", "134, 226, 213", "46, 204, 113", "22, 160, 133", "63, 195, 128", "1, 152, 117", "3, 166, 120", "77, 175, 124", "42, 187, 155", "0, 177, 106", "30, 130, 76", "4, 147, 114", "38, 194, 129", "245, 215, 110", "247, 202, 24", "244, 208, 63", "233,212,96", "253, 227, 167", "248, 148, 6", "235, 149, 50", "232, 126, 4", "244, 179, 80", "242, 120, 75", "235, 151, 78", "245, 171, 53", "211, 84, 0", "243, 156, 18", "249, 105, 14", "249, 191, 59", "242, 121, 53", "230, 126, 34", "236,236,236", "108, 122, 137", "210, 215, 211", "238, 238, 238", "189, 195, 199", "236, 240, 241", "149, 165, 166", "218, 223, 225", "171, 183, 183", "242, 241, 239", "191, 191, 191"] | |
| var offsetTop = 110; | |
| var offsetLeft = 110; | |
| for (i=0 ; i<=75; i++){ | |
| var color = color_list[this.getRandomInt(0,color_list.length)]; | |
| offset = generate_dots(); | |
| this.points.push( { x: offset.x, y: offset.y, originalX: offset.x, originalY: offset.y, color: color, radius: Math.round(Math.random() * (12 - 2 + 1)) + 2, opacityDelay: Math.round(Math.random()*100)/100 } ); | |
| } | |
| }, | |
| rdm: function(from, to){ | |
| return Math.floor(Math.random() * (to - from + 1) + from); | |
| }, | |
| wiggle: function() { | |
| if ( !Nodes.mouse.move ) { | |
| for (var i = 0; i < this.points.length; i++ ){ | |
| currentPoint = this.points[i]; | |
| var newcx = currentPoint.originalX + this.rdm(-currentPoint.radius, currentPoint.radius); | |
| var newcy = currentPoint.originalY + this.rdm(-currentPoint.radius, currentPoint.radius); | |
| $(currentPoint).stop().animate({x: newcx, y: newcy}, currentPoint.radius * 100, 'linear'); | |
| } | |
| } | |
| }, | |
| updatePoints: function() { | |
| var i, currentPoint, theta, distance; | |
| for (i = 0; i < this.points.length; i++ ){ | |
| currentPoint = this.points[i]; | |
| theta = Math.atan2( currentPoint.y - this.mouse.y, currentPoint.x - this.mouse.x); | |
| if ( this.mouse.down ) { | |
| distance = this.reactionSensitivity * 200 / Math.sqrt((this.mouse.x - currentPoint.x) * (this.mouse.x - currentPoint.x) + | |
| (this.mouse.y - currentPoint.y) * (this.mouse.y - currentPoint.y)); | |
| } else { | |
| distance = this.reactionSensitivity * 100 / Math.sqrt((this.mouse.x - currentPoint.x) * (this.mouse.x - currentPoint.x) + | |
| (this.mouse.y - currentPoint.y) * (this.mouse.y - currentPoint.y)); | |
| } | |
| currentPoint.x += Math.cos(theta) * distance + (currentPoint.originalX - currentPoint.x) * 0.05; | |
| currentPoint.y += Math.sin(theta) * distance + (currentPoint.originalY - currentPoint.y) * 0.05; | |
| } | |
| }, | |
| drawPoints: function() { | |
| var i, currentPoint; | |
| for ( i = 0; i < this.points.length; i++ ) { | |
| currentPoint = this.points[i]; | |
| // Draw the dot. | |
| this.context.fillStyle = 'rgba('+currentPoint.color+','+currentPoint.opacityDelay+')'; | |
| if(currentPoint.opacityDelay < 1) currentPoint.opacityDelay = currentPoint.opacityDelay + 0.025; | |
| this.context.strokeStyle = 'rgb('+currentPoint.color+')'; | |
| this.context.beginPath(); | |
| this.context.arc(currentPoint.x, currentPoint.y, currentPoint.radius ,0 , Math.PI*2, true); | |
| this.context.closePath(); | |
| this.context.fill(); | |
| } | |
| }, | |
| draw: function() { | |
| this.animation = requestAnimationFrame( function(){ Nodes.draw() } ); | |
| this.clear(); | |
| this.updatePoints(); | |
| this.drawPoints(); | |
| }, | |
| clear: function() { | |
| this.canvas.width = this.canvas.width; | |
| }, | |
| mouseDown: function( event ){ | |
| Nodes.mouse.down = true; | |
| }, | |
| mouseUp: function( event ){ | |
| Nodes.mouse.down = false; | |
| }, | |
| mouseMove: function(event){ | |
| for (var i = 0; i < Nodes.points.length; i++ ){ | |
| $(Nodes.points[i]).stop(); | |
| } | |
| Nodes.mouse.x = event.offsetX || (event.layerX - Nodes.canvas.offsetLeft); | |
| Nodes.mouse.y = event.offsetY || (event.layerY - Nodes.canvas.offsetTop); | |
| Nodes.mouse.move = true; | |
| }, | |
| mouseOut: function(event){ | |
| Nodes.mouse.x = -1000; | |
| Nodes.mouse.y = -1000; | |
| Nodes.mouse.down = false; | |
| Nodes.mouse.move = false; | |
| } | |
| } | |
| </script> | |
| <script type="text/javascript"> | |
| var dotsColor = "77,78,79"; | |
| $('html,body').css({'background': 'transparent'}); | |
| $('#canvas_logo').css({'background': 'transparent'}); | |
| setTimeout(function(){ | |
| Nodes.init(); | |
| }, 250); | |
| function generate_dots(){ | |
| var h = $("#canvas_logo").height(); | |
| var w = $("#canvas_logo").width(); | |
| var minDimension = h < w ? h : w; | |
| var radius = (minDimension / 2) - 20; | |
| var angle = Math.random() * Math.PI*2; | |
| x = Math.cos(angle)*90; | |
| y = Math.sin(angle)*90; | |
| rnd_pos_x = Math.round(Math.random()*20*100)/100 ; | |
| rnd_pos_y = Math.round(Math.random()*20*100)/100 ; | |
| var offset = { | |
| y: parseInt(y + radius + 10, 10)+rnd_pos_y, | |
| x: parseInt(x + radius + 10, 10)+rnd_pos_x | |
| }; | |
| return offset | |
| } | |
| </script> | |
| </body> | |
| </html> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment