animate view counter

This commit is contained in:
2025-07-31 20:23:38 +02:00
parent 2bf12deaf2
commit df7dbfbfdc
+62 -3
View File
@@ -28,22 +28,79 @@
padding: 0.25rem; padding: 0.25rem;
font-size: 1.25rem; font-size: 1.25rem;
span { span {
display: inline-block; display: inline-flex;
position: relative;
background: black; background: black;
color: white; color: white;
padding: 0.5ch; padding: 0.5ch;
font-family: monospace; font-family: monospace;
min-width: 1.5rem;
min-height: 2rem;
overflow: hidden;
&::before {
position: absolute;
display: flex;
justify-content: center;
align-items: center;
content: "?";
top: 0;
left: 0;
width: 100%;
height: 100%;
}
&::after {
content: attr(data-number);
position: absolute;
display: flex;
justify-content: center;
align-items: center;
top: -100%;
left: 0;
width: 100%;
height: 100%;
}
&[data-number] {
&::before {
animation-delay: inherit;
animation-duration: 0.2s;
animation-name: spin-before;
animation-fill-mode: forwards;
}
&::after {
animation-delay: inherit;
animation-duration: 0.2s;
animation-name: spin-after;
animation-fill-mode: forwards;
}
}
} }
} }
} }
@media (max-width: 800px) { @container(max-width: 175px) {
.view-counter { .view-counter {
margin: 0 auto; margin: 0 auto;
} }
} }
@keyframes spin-before {
0% {
top: 0;
}
100% {
top: 100%;
}
}
@keyframes spin-after {
0% {
top: -100%;
}
100% {
top: 0;
}
}
</style> </style>
<script> <script>
@@ -77,7 +134,9 @@
viewCounter.innerHTML = ""; viewCounter.innerHTML = "";
for (let i = 0; i < chars.length; i++) { for (let i = 0; i < chars.length; i++) {
const span = document.createElement("span"); const span = document.createElement("span");
span.textContent = chars[i]; span.setAttribute("data-number", chars[i]);
span.setAttribute("aria-label", chars[i]);
span.style.animationDelay = `${i * 0.05}s`;
viewCounter.appendChild(span); viewCounter.appendChild(span);
} }
setTimeout(updateViewCount, 10000); setTimeout(updateViewCount, 10000);