2024-08-14 01:01:06 -04:00
|
|
|
import backwalkgeorge from "/backwalkgeorge.jpg";
|
|
|
|
import georgetoilet from "/georgetoilet.png";
|
|
|
|
import klinefloor from "/klinefloor.jpeg";
|
|
|
|
import klinemirror from "/klinemirror.jpg";
|
|
|
|
import klineoutside from "/klineoutside.jpeg";
|
|
|
|
import klinetrain from "/klinetrain.jpeg";
|
|
|
|
import sashaklineburrito from "/sashaklineburrito.jpeg";
|
|
|
|
import sashaklinecar from "/sashaklinecar.jpeg";
|
|
|
|
import sunsetkline from "/sunsetkline.png";
|
2024-08-25 20:38:38 -04:00
|
|
|
import georgerasp from "/georgerasp.gif";
|
|
|
|
import sunsetfourteenth from "/14thstsunrise.gif";
|
|
|
|
import solderkitty from "/solderkitty.jpeg";
|
|
|
|
import ducklings from "/ducklings.gif";
|
|
|
|
import fieldnotes from "/fieldnotes.gif";
|
|
|
|
import lamp from "/lamp.gif";
|
|
|
|
import ohio from "/ohio.jpeg";
|
|
|
|
import heron from "/heron.jpeg";
|
|
|
|
import flowers from "/flowers.jpeg";
|
|
|
|
import mirror from "/mirror.jpeg";
|
2024-08-14 01:01:06 -04:00
|
|
|
|
2024-08-25 20:38:38 -04:00
|
|
|
let background = document.getElementById("background")!;
|
|
|
|
|
|
|
|
let prefersReducedMotion = window.matchMedia(
|
|
|
|
"(prefers-reduced-motion: reduce)",
|
|
|
|
);
|
2024-08-14 01:01:06 -04:00
|
|
|
|
|
|
|
let setImages = () => {
|
2024-08-25 20:38:38 -04:00
|
|
|
let images: string[] = [];
|
|
|
|
if (prefersReducedMotion.matches) {
|
|
|
|
images = [
|
|
|
|
backwalkgeorge,
|
|
|
|
georgetoilet,
|
|
|
|
klinefloor,
|
|
|
|
klinemirror,
|
|
|
|
klineoutside,
|
|
|
|
klinetrain,
|
|
|
|
sashaklineburrito,
|
|
|
|
sashaklinecar,
|
|
|
|
sunsetkline,
|
|
|
|
// georgerasp,
|
|
|
|
// sunsetfourteenth,
|
|
|
|
solderkitty,
|
|
|
|
// ducklings,
|
|
|
|
fieldnotes,
|
|
|
|
// lamp,
|
|
|
|
ohio,
|
|
|
|
heron,
|
|
|
|
flowers,
|
|
|
|
mirror,
|
|
|
|
];
|
|
|
|
} else {
|
|
|
|
images = [
|
|
|
|
backwalkgeorge,
|
|
|
|
georgetoilet,
|
|
|
|
klinefloor,
|
|
|
|
klinemirror,
|
|
|
|
klineoutside,
|
|
|
|
klinetrain,
|
|
|
|
sashaklineburrito,
|
|
|
|
sashaklinecar,
|
|
|
|
sunsetkline,
|
|
|
|
georgerasp,
|
|
|
|
sunsetfourteenth,
|
|
|
|
solderkitty,
|
|
|
|
ducklings,
|
|
|
|
fieldnotes,
|
|
|
|
lamp,
|
|
|
|
ohio,
|
|
|
|
heron,
|
|
|
|
flowers,
|
|
|
|
mirror,
|
|
|
|
];
|
|
|
|
}
|
|
|
|
const randn_bm = (mean = 0, stdev = 0.4) => {
|
|
|
|
const u = 1 - Math.random();
|
|
|
|
const v = Math.random();
|
|
|
|
const z = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);
|
|
|
|
return z * stdev + mean;
|
|
|
|
};
|
|
|
|
|
|
|
|
const randNums = (count: number, minDistance: number): number[] => {
|
|
|
|
const numbers: number[] = [];
|
|
|
|
|
|
|
|
function isFarEnough(num: number): boolean {
|
|
|
|
for (const n of numbers) {
|
|
|
|
if (Math.abs(num - n) < minDistance) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
while (numbers.length < count) {
|
|
|
|
const newNumber = randn_bm();
|
|
|
|
if (isFarEnough(newNumber)) {
|
|
|
|
numbers.push(newNumber);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return numbers;
|
|
|
|
};
|
|
|
|
|
|
|
|
const lefts = randNums(images.length, 0.05);
|
|
|
|
const tops = randNums(images.length, 0.05);
|
2024-08-14 01:01:06 -04:00
|
|
|
for (let index in images) {
|
|
|
|
let img = document.createElement("img");
|
|
|
|
img.setAttribute("src", images[index]);
|
2024-08-25 20:38:38 -04:00
|
|
|
// let left = randn_bm();
|
|
|
|
// let top = randn_bm();
|
|
|
|
let left = lefts[index];
|
|
|
|
let top = tops[index];
|
|
|
|
let z = (Math.abs(left) + Math.abs(top)) / 2;
|
|
|
|
let range = { x: window.innerWidth * 0.7, y: window.innerHeight * 0.7 };
|
|
|
|
img.style.setProperty(
|
|
|
|
"left",
|
|
|
|
`${left * range.x + window.innerWidth / 2}px`,
|
|
|
|
);
|
|
|
|
img.style.setProperty("top", `${top * range.y + window.innerHeight / 2}px`);
|
|
|
|
img.style.setProperty("--translate-z", `${z * 3000}px`);
|
|
|
|
img.setAttribute("data-group", `${Math.floor(Math.random() * 3)}`);
|
|
|
|
background.append(img);
|
2024-08-14 01:01:06 -04:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2024-08-25 20:38:38 -04:00
|
|
|
const root = document.documentElement;
|
|
|
|
|
|
|
|
const onMove = (ev: MouseEvent) => {
|
|
|
|
let rotateY = `${(ev.clientX - window.innerWidth / 2) * 0.001}deg`;
|
|
|
|
let rotateX = `${(ev.clientY - window.innerHeight / 2) * 0.001}deg`;
|
|
|
|
root.style.setProperty("--rotate-x", rotateX);
|
|
|
|
root.style.setProperty("--rotate-y", rotateY);
|
|
|
|
};
|
|
|
|
|
|
|
|
document.addEventListener("mousemove", onMove);
|
|
|
|
|
2024-08-14 01:01:06 -04:00
|
|
|
setImages();
|