SnippetUI

İstatistik Sayacı Kartı

Bu, sayfa kaydırıldıkça sayılar hareketlendiğinden ve sıfırdan arttığından gösterge tabloları ve açılış sayfaları için ideal olan bir istatistik kartı bileşenidir.

HTMLCSSJavaScript

Önizleme

Dört istatistik kartı bir tablo halinde düzenlenmiştir ve siz kaydırdıkça sayılar sıfırdan başlayarak sayılır.

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

Kullanım durumları ve özellikleri

  • Açılış sayfası performansı bölümü: Görüntülemeler, müşteri memnuniyeti, ülke sayısı vb. gibi ölçümleri etkili bir şekilde iletin.
  • Kavşak Gözlemcisini Kullanma: Animasyon kaydırıldığında ve ilk kez göründüğünde tetiklenir.
  • Ondalık nokta desteği: “data-decimals” özelliğiyle hem tamsayı hem de ondalık sayaçları destekler.
  • CSS değişkenleriyle renk yönetimi: Her kartın vurgu renklerini ayırmak için --accent değişkenini kullanabilirsiniz.

Tasarım ve kullanıcı deneyiminin önemli noktaları

  1. Ease-out animasyonu: “Kübik-bezier” yerine, kübik bir gizli işlevin kullanıldığı benzersiz bir hareket hızı, sayısal değerin hızlanmasının durduğu doğal bir harekettir.
  2. Degrade metin: -webkit-background-clip: text ile sayının kendisi bir derecelendirmeye dönüşerek birinci sınıf bir his yaratır.
  3. Sayıları toLocaleString() ile biçimlendir: Sayıları 12847 → 12,847 gibi yerel ayara göre görüntüleyin.

Nasıl kişiselleştirilir

Sayma hızını değiştir (milisaniye):

// Animasyon süresini kısaltın
// animateCounter(el, target, suffix, decimals, 1000);

// Animasyon süresini uzatın
// animateCounter(el, target, suffix, decimals, 3000);

Ondalık basamak sayısını değiştir:

<!-- 3 ondalık basamak -->
<span class="stat-number" data-target="99.999" data-suffix="%" data-decimals="3">0%</span>

Uygulama kodu

<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>
<!-- Diğer kartlar için benzer yapı -->
</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>

Tarayıcı uyumluluk durumu

TarayıcıUyumluluk durumu
Krom 51+✅ Tamamen uyumlu
Firefox 55+✅ Tamamen uyumlu
Safari 12.1+✅ Uyumlu
Kenar 79+✅ Tamamen uyumlu

Intersection Observer API, Nenewa’yı yalnızca modern tarayıcılarda destekler. IE11 desteği istiyorsanız çoklu doldurma gereklid