SnippetUI

Statistik-Counter-Karte

Hierbei handelt es sich um eine Statistikkartenkomponente, die sich ideal für Dashboards und Landingpages eignet, da die Zahlen beim Scrollen der Seite animiert werden und von Null an hochgezählt werden.

HTMLCSSJavaScript

Vorschau

Vier Statistikkarten sind in einem Raster angeordnet und beim Scrollen werden die Zahlen von Null an hochgezählt.

🚀
0
Active Users
0%
Satisfaction
🌍
0+
Countries
0%
Uptime

Anwendungsfälle und Funktionen

  • Abschnitt zur Leistung der Zielseite: Kommunizieren Sie wirkungsvoll Kennzahlen wie Aufrufe, Kundenzufriedenheit, Anzahl der Länder usw.
  • Verwendung von Intersection Observer: Die Animation wird beim Scrollen ausgelöst und ist zum ersten Mal sichtbar.
  • Dezimalpunktunterstützung: Unterstützt sowohl Ganzzahl- als auch Dezimalzähler mit dem Attribut „data-decimals“.
  • Farbmanagement mit CSS-Variablen: Sie können die Variable „—accent“ verwenden, um Akzentfarben für jede Karte zu trennen.

Design- und UX-Punkte

  1. Ease-out-Animation: Anstelle eines „kubischen Bézier“ ist ein einzigartiges Ease-out mithilfe einer kubischen versteckten Funktion eine natürliche Bewegung, bei der der numerische Wert nicht mehr beschleunigt wird.
  2. Verlaufstext: Mit „-webkit-background-clip:text“ wird die Zahl selbst zu einer Abstufung, wodurch ein erstklassiges Gefühl entsteht.
  3. Formatieren Sie Zahlen mit „toLocaleString()“: Zeigen Sie Zahlen entsprechend dem Gebietsschema an, z. B. 12847 → 12.847.

So passen Sie es an

Zählgeschwindigkeit ändern (Millisekunden):

// Animationszeit verkürzen
// animateCounter(el, target, suffix, decimals, 1000);

// Animationszeit verlängern
// animateCounter(el, target, suffix, decimals, 3000);

Dezimalstellen ändern:

<!-- 3 Dezimalstellen -->
<span class="stat-number" data-target="99.999" data-suffix="%" data-decimals="3">0%</span>

Implementierungscode

<div class="stats-grid">
<div class="stat-card stat-card-1">
  <div class="stat-icon">🚀</div>
  <span class="stat-number" data-target="12847" data-suffix="" data-decimals="0">0</span>
  <div class="stat-label">Active Users</div>
</div>
<!-- Ähnlicher Aufbau für andere Karten -->
</div>

<style>
`
.stat-number {
background: linear-gradient(135deg, var(--accent), var(--accent-light));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.stat-card-1 { --accent: #6366f1; --accent-light: #8b5cf6; }
`
</style>

<script>
(function() {
function animateCounter(el, target, suffix, decimals, duration) {
  var start = null;
  function step(ts) {
    if (!start) start = ts;
    var p = Math.min((ts-start)/duration,1);
    var v = (1-Math.pow(1-p,3))*target;
    el.textContent=(decimals>0?v.toFixed(decimals):Math.floor(v).toLocaleString())+suffix;
    if(p<1) requestAnimationFrame(step);
  }
  requestAnimationFrame(step);
}
var observer = new IntersectionObserver(function(entries) {
  entries.forEach(function(e) {
    if (e.isIntersecting) {
      var el = e.target;
      if (!el.classList.contains('animated')) {
        el.classList.add('animated');
        animateCounter(el, parseFloat(el.dataset.target), el.dataset.suffix || '', parseInt(el.dataset.decimals || '0'), 2000);
      }
    }
  });
}, { threshold: 0.5 });

document.querySelectorAll('.stat-number').forEach(function(el) {
  observer.observe(el);
});
})();
</script>

Browserkompatibilitätsstatus

BrowserKompatibilitätsstatus
Chrom 51+✅ Vollständig kompatibel
Firefox 55+✅ Vollständig kompatibel
Safari 12.1+✅ Kompatibel
Kante 79+✅ Vollständig kompatibel

Die Intersection Observer API unterstützt Nenewa nur in modernen Browsern. Wenn Sie IE11-Unterstützung wünschen, ist ein Polyfill erforderlich.��������������