added idle animations
This commit is contained in:
parent
a0bf73dae6
commit
75acef5630
@ -50,22 +50,42 @@
|
|||||||
return others;
|
return others;
|
||||||
});
|
});
|
||||||
|
|
||||||
document.getElementById("stars")?.append(...stars);
|
const lineInterval = setInterval(() => {
|
||||||
|
if (Math.random() < 0.7) return;
|
||||||
|
|
||||||
function centeredPoint(
|
while (true) {
|
||||||
[x, y]: [number, number],
|
const lidx = chooseRandom(indices);
|
||||||
width: number,
|
const ridx = chooseRandom(indices);
|
||||||
): [number, number] {
|
if (lidx === ridx) continue;
|
||||||
return [x + width / 200, y + width / 120];
|
|
||||||
}
|
const [lx, ly] = points[lidx];
|
||||||
|
const [rx, ry] = points[ridx];
|
||||||
|
const d = Math.sqrt(
|
||||||
|
Math.pow(lx - rx, 2) + Math.pow(ly - ry, 2),
|
||||||
|
);
|
||||||
|
if (d > 0.4) continue;
|
||||||
|
|
||||||
|
const line = document.getElementById(`${lidx}-${ridx}`);
|
||||||
|
if (!line) continue;
|
||||||
|
|
||||||
|
line.setAttribute("opacity", "1");
|
||||||
|
setTimeout(
|
||||||
|
() => line.setAttribute("opacity", "0"),
|
||||||
|
Math.random() * 4500,
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
|
||||||
|
document.getElementById("stars")?.append(...stars);
|
||||||
|
|
||||||
const linesSVG = document.getElementById("stars-lines");
|
const linesSVG = document.getElementById("stars-lines");
|
||||||
|
|
||||||
stars.forEach((_, i) => {
|
stars.forEach((_, i) => {
|
||||||
const [x1, y1] = centeredPoint(points[i], sizes[i]);
|
const [x1, y1] = points[i];
|
||||||
|
|
||||||
connections[i].forEach((conn) => {
|
connections[i].forEach((conn) => {
|
||||||
const [x2, y2] = centeredPoint(points[conn], sizes[conn]);
|
const [x2, y2] = points[conn];
|
||||||
const line = document.createElementNS(
|
const line = document.createElementNS(
|
||||||
"http://www.w3.org/2000/svg",
|
"http://www.w3.org/2000/svg",
|
||||||
"line",
|
"line",
|
||||||
@ -106,17 +126,20 @@
|
|||||||
star.addEventListener("mouseleave", leaveListeners[i]);
|
star.addEventListener("mouseleave", leaveListeners[i]);
|
||||||
});
|
});
|
||||||
|
|
||||||
const svgResizeListener = () =>
|
const svgResizeListener = () => {
|
||||||
linesSVG?.setAttribute(
|
linesSVG?.setAttribute(
|
||||||
"viewBox",
|
"viewBox",
|
||||||
`0 0 ${window.innerWidth} ${window.innerHeight}`,
|
`0 0 ${window.innerWidth} ${window.innerHeight}`,
|
||||||
);
|
);
|
||||||
|
};
|
||||||
|
|
||||||
svgResizeListener();
|
svgResizeListener();
|
||||||
|
|
||||||
window.addEventListener("resize", svgResizeListener);
|
window.addEventListener("resize", svgResizeListener);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
|
clearInterval(lineInterval);
|
||||||
|
|
||||||
stars.forEach((star, i) => {
|
stars.forEach((star, i) => {
|
||||||
star.removeEventListener("mouseenter", enterListeners[i]);
|
star.removeEventListener("mouseenter", enterListeners[i]);
|
||||||
star.removeEventListener("mouseleave", leaveListeners[i]);
|
star.removeEventListener("mouseleave", leaveListeners[i]);
|
||||||
@ -130,7 +153,7 @@
|
|||||||
<svg
|
<svg
|
||||||
id="stars-lines"
|
id="stars-lines"
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
style="position: fixed; left: 0; top: 0; height: 100vh; width: 100vw; z-index: 0;"
|
style="position: fixed; left: 0; top: 0; height: 100%; width: 100%; z-index: 0;"
|
||||||
></svg>
|
></svg>
|
||||||
|
|
||||||
<div id="stars" style="position: fixed; left: 0; top: 0; z-index: 2;"></div>
|
<div id="stars" style="position: fixed; left: 0; top: 0; z-index: 2;"></div>
|
||||||
@ -192,6 +215,8 @@
|
|||||||
|
|
||||||
:global(.star) {
|
:global(.star) {
|
||||||
animation: fadeIn 1s forwards;
|
animation: fadeIn 1s forwards;
|
||||||
|
transition-duration: 500ms;
|
||||||
|
translate: -50% -50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
:global(#stars-lines line) {
|
:global(#stars-lines line) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user