initial commit, and probably the last
This commit is contained in:
commit
fd8d4aca74
18
index.html
Normal file
18
index.html
Normal file
@ -0,0 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Scatter</title>
|
||||
<meta charset='UTF-8'>
|
||||
</head>
|
||||
<style>
|
||||
body, html {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
|
||||
<canvas id='c' width='1000' height='700'></canvas>
|
||||
|
||||
<script src='main.js'></script>
|
||||
</body>
|
||||
</html>
|
92
main.js
Normal file
92
main.js
Normal file
@ -0,0 +1,92 @@
|
||||
var $c = document.getElementById('c'),
|
||||
c = $c.getContext('2d'),
|
||||
// RGBA colors
|
||||
colors = [[224, 56, 56, 1], [252, 191, 22, 1],
|
||||
[129, 219, 39, 1], [39, 162, 219, 1],
|
||||
[219, 39, 159, 1]],
|
||||
balls = [];
|
||||
|
||||
|
||||
// To reduce calculations
|
||||
const fourty = Math.PI/4;
|
||||
const ninety = Math.PI/2;
|
||||
|
||||
// Degrees, used to move circles in their direction
|
||||
// 45, 135, 225, 315
|
||||
var degrees = [fourty, fourty*3, Math.PI+fourty, Math.PI+fourty*3];
|
||||
|
||||
function add(x, y) {
|
||||
var index = Math.floor(Math.random()*colors.length);
|
||||
var radius = Math.random()*10;
|
||||
balls.push({
|
||||
color: colors[index].slice(0),
|
||||
x: Math.random() < 0.5 ? x+Math.random() : x-Math.random(),
|
||||
y: Math.random() < 0.5 ? y+Math.random() : y-Math.random(),
|
||||
r: radius,
|
||||
deg: degrees[Math.floor(Math.random()*degrees.length)]
|
||||
});
|
||||
}
|
||||
|
||||
(function loop() {
|
||||
mozRequestAnimationFrame(function() {
|
||||
c.clearRect(0, 0, $c.width, $c.height);
|
||||
|
||||
for( var i = 0; i < balls.length; i++ ) {
|
||||
var ball = balls[i];
|
||||
|
||||
// If ball has faded away completly, remove it
|
||||
if(ball.color[3] < 0.01) {
|
||||
balls = balls.slice(0, i).concat(balls.slice(i+1, balls.length));
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
ball.color[3] -= 0.01;
|
||||
|
||||
var dx = ball.x + Math.random()*5*Math.sin(ball.deg);
|
||||
var dy = ball.y + Math.random()*5*Math.cos(ball.deg);
|
||||
ball.x = dx;
|
||||
ball.y = dy;
|
||||
ball.r = ball.r + 1;
|
||||
|
||||
c.beginPath();
|
||||
c.fillStyle = 'rgba(' + ball.color.join(',') + ')';
|
||||
c.arc(dx, dy, ball.r, 0, 2*Math.PI);
|
||||
c.fill();
|
||||
}
|
||||
loop();
|
||||
})
|
||||
})();
|
||||
|
||||
|
||||
var isMouseDown = false,
|
||||
interval = null,
|
||||
mouse = {};
|
||||
|
||||
$c.addEventListener('mousedown', function(e) {
|
||||
isMouseDown = true;
|
||||
mouse = {x: e.pageX, y: e.pageY};
|
||||
interval = setInterval(function() {
|
||||
if(isMouseDown) {
|
||||
add(mouse.x, mouse.y);
|
||||
}
|
||||
}, 100)
|
||||
})
|
||||
$c.addEventListener('mouseup', function() {
|
||||
isMouseDown = false;
|
||||
clearInterval(interval);
|
||||
})
|
||||
$c.addEventListener('mousemove', function(e) {
|
||||
if(isMouseDown) {
|
||||
add(e.pageX, e.pageY)
|
||||
}
|
||||
mouse = {x: e.pageX, y: e.pageY};
|
||||
})
|
||||
|
||||
|
||||
window.onresize = function() {
|
||||
$c.setAttribute('width', window.innerWidth);
|
||||
$c.setAttribute('height', window.innerHeight);
|
||||
}
|
||||
|
||||
window.onresize();
|
||||
|
Loading…
Reference in New Issue
Block a user