59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
var E = (function () {
|
|
const images = Array.of.apply([], document.getElementsByTagName("img"));
|
|
const main = document.getElementsByTagName("main")[0];
|
|
const overlays = images.filter(e => e.classList.contains("ov"));
|
|
const wms = images.filter(e => e.classList.contains("wm"));
|
|
const shark = images.find(e => e.classList.contains("shark"));
|
|
|
|
const BG_W = 1300;
|
|
const BG_H = 688;
|
|
|
|
var strobeIdx = ~~(Math.random() * 999);
|
|
const nOverlays = overlays.length;
|
|
|
|
function strobe() {
|
|
if (Math.random() < 0.5) {
|
|
strobeIdx++;
|
|
} else {
|
|
strobeIdx--;
|
|
}
|
|
strobeIdx = (strobeIdx + nOverlays) % nOverlays;
|
|
for (var i = 0; i < nOverlays; i++) {
|
|
overlays[i].style.visibility = (i == strobeIdx) ? "visible" : "hidden";
|
|
}
|
|
}
|
|
|
|
var time0 = +new Date;
|
|
function elapsed() { return (new Date - time0) / 1000; }
|
|
|
|
var lastStrobe = -Infinity;
|
|
var lastShake = wms.map(_ => Math.random() * 0.2);
|
|
|
|
function animate() {
|
|
requestAnimationFrame(animate);
|
|
var t = elapsed();
|
|
|
|
if (t - lastStrobe > 0.5) {
|
|
lastStrobe = t;
|
|
strobe();
|
|
}
|
|
|
|
for (var i = 0; i < wms.length; i++) {
|
|
if (t - lastShake[i] > 0.1) {
|
|
const dx = Math.random() * 0.2;
|
|
const dy = Math.random() * 0.2;
|
|
wms[i].style.transform = "translate(" + dx + "vw," + dy + "vw)";
|
|
lastShake[i] = t;
|
|
}
|
|
}
|
|
|
|
const shDy = 2 * Math.sin(elapsed() * 4.7);
|
|
const shRot = Math.sin(elapsed() * 7) * 3;
|
|
shark.style.transform = "translate(0," + shDy + "vw) rotate(" + shRot + "deg)";
|
|
}
|
|
|
|
animate();
|
|
|
|
return { main, overlays, shark, wms, strobe, animate };
|
|
})();
|