-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdiscoball.js
57 lines (53 loc) · 2.26 KB
/
discoball.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var t = 1;
var radius = 50;
var squareSize = 6.5;
var prec = 19.55;
var fuzzy = 0.001;
var inc = (Math.PI-fuzzy)/prec;
var discoBall = document.getElementById("discoBall");
for(var t=fuzzy; t<Math.PI; t+=inc) {
var z = radius * Math.cos(t);
var currentRadius = Math.abs((radius * Math.cos(0) * Math.sin(t)) - (radius * Math.cos(Math.PI) * Math.sin(t))) / 2.5;
var circumference = Math.abs(2 * Math.PI * currentRadius);
var squaresThatFit = Math.floor(circumference / squareSize);
var angleInc = (Math.PI*2-fuzzy) / squaresThatFit;
for(var i=angleInc/2+fuzzy; i<(Math.PI*2); i+=angleInc) {
var square = document.createElement("div");
var squareTile = document.createElement("div");
squareTile.style.width = squareSize + "px";
squareTile.style.height = squareSize + "px";
squareTile.style.transformOrigin = "0 0 0";
squareTile.style.webkitTransformOrigin = "0 0 0";
squareTile.style.webkitTransform = "rotate(" + i + "rad) rotateY(" + t + "rad)";
squareTile.style.transform = "rotate(" + i + "rad) rotateY(" + t + "rad)";
if((t>1.3 && t<1.9) || (t<-1.3 && t>-1.9)) {
squareTile.style.backgroundColor = randomColor("bright");
} else {
squareTile.style.backgroundColor = randomColor("any");
}
square.appendChild(squareTile);
square.className = "square";
squareTile.style.webkitAnimation = "reflect 2s linear infinite";
squareTile.style.webkitAnimationDelay = String(randomNumber(0,20)/10) + "s";
squareTile.style.animation = "reflect 2s linear infinite";
squareTile.style.animationDelay = String(randomNumber(0,20)/10) + "s";
squareTile.style.backfaceVisibility = "hidden";
var x = radius * Math.cos(i) * Math.sin(t);
var y = radius * Math.sin(i) * Math.sin(t);
square.style.webkitTransform = "translateX(" + Math.ceil(x) + "px) translateY(" + y + "px) translateZ(" + z + "px)";
square.style.transform = "translateX(" + x + "px) translateY(" + y + "px) translateZ(" + z + "px)";
discoBall.appendChild(square);
}
}
function randomColor(type) {
var c;
if(type == "bright") {
c = randomNumber(130, 255);
} else {
c = randomNumber(110, 190);
}
return "rgb(" + c + "," + c + "," + c + ")";
}
function randomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}