Carte compteur de stats
Il s'agit d'un composant de carte de statistiques idéal pour les tableaux de bord et les pages de destination, car les nombres s'animent et comptent à partir de zéro au fur et à mesure que la page défile.
HTMLCSSJavaScript
Aperçu
Quatre cartes de statistiques sont disposées dans une grille et, à mesure que vous faites défiler, les nombres comptent à partir de zéro.
0
Active Users
0%
Satisfaction
0+
Countries
0%
Uptime
Cas d’utilisation et fonctionnalités
- Section Performances de la page de destination : communiquez de manière percutante des mesures telles que les vues, la satisfaction client, le nombre de pays, etc.
- Utilisation d’Intersection Observer : l’animation se déclenche lorsqu’elle défile et est visible pour la première fois.
- Prise en charge du point décimal : prend en charge les compteurs entiers et décimaux avec l’attribut
data-decimals. - Gestion des couleurs avec des variables CSS : Vous pouvez utiliser la variable
--accentpour séparer les couleurs d’accent pour chaque carte.
Points de conception et d’UX
- Animation d’accélération : Plutôt que « cubique-bézier », une accélération unique utilisant une fonction cubique cachée est un mouvement naturel dans lequel la valeur numérique cesse d’accélérer.
- Texte dégradé : Avec
-webkit-background-clip: text, le numéro lui-même devient une gradation, créant une sensation premium. - Formater les nombres avec
toLocaleString(): affichez les nombres en fonction des paramètres régionaux, par exemple 12 847 → 12 847.
Comment personnaliser
Changer la vitesse de comptage (millisecondes):
// Raccourcir le temps d'animation
// animateCounter(el, target, suffix, decimals, 1000);
// Allonger le temps d'animation
// animateCounter(el, target, suffix, decimals, 3000);
Modifier les décimales:
<!-- 3 décimales -->
<span class="stat-number" data-target="99.999" data-suffix="%" data-decimals="3">0%</span>
##Code d’implémentation
<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>
<!-- Structure similaire pour d'autres cartes -->
</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> État de compatibilité du navigateur
| Navigateur | Statut de compatibilité |
|---|---|
| Chrome 51+ | ✅ Entièrement compatible |
| Firefox 55+ | ✅ Entièrement compatible |
| Safari 12.1+ | ✅Compatible |
| Bord 79+ | ✅ Entièrement compatible |
L’API Intersection Observer prend en charge Nenewa uniquement dans les navigateurs modernes. Un polyfill est requis si vous souhaitez la prise en charge d’IE11.��������������