Карточка со счетчиком статистики
Это компонент карты статистики, который идеально подходит для информационных панелей и целевых страниц, поскольку числа анимируются и отсчитываются от нуля при прокрутке страницы.
HTMLCSSJavaScript
Предварительный просмотр
Четыре карточки со статистикой расположены в виде сетки, и при прокрутке числа отсчитываются от нуля.
0
Active Users
0%
Satisfaction
0+
Countries
0%
Uptime
Варианты использования и функции
– Раздел «Эффективность целевой страницы».: эффективно сообщайте о таких показателях, как просмотры, удовлетворенность клиентов, количество стран и т. д.
- Использование Intersection Observer: анимация срабатывает при первой прокрутке и отображении.
- Поддержка десятичной точки: поддерживает как целые, так и десятичные счетчики с атрибутом data-decimals.
- Управление цветом с помощью переменных CSS: вы можете использовать переменную
--accent, чтобы разделить акцентные цвета для каждой карточки.
##Точки дизайна и UX
- Анимация замедления. Вместо «кубического безье» уникальное замедление с использованием кубической скрытой функции представляет собой естественное движение, при котором числовое значение перестает ускоряться.
- Градиентный текст: с
-webkit-background-clip: textчисло само по себе становится градацией, создавая ощущение премиальности. - Форматируйте числа с помощью
toLocaleString(): отображайте числа в соответствии с языковым стандартом, например 12847 → 12 847.
Как настроить
Изменить скорость счета (миллисекунды):
// Сокращаем время анимации
// animateCounter(el, target, suffix, decimals, 1000);
// Увеличиваем время анимации
// animateCounter(el, target, suffix, decimals, 3000);
Изменить количество десятичных знаков:
<!-- 3 десятичных знака -->
<span class="stat-number" data-target="99.999" data-suffix="%" data-decimals="3">0%</span>
Код реализации
<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>
<!-- Аналогичная структура для других карт. -->
</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> Статус совместимости браузера
| Браузер | Статус совместимости |
|---|---|
| Хром 51+ | ✅ Полностью совместим |
| Firefox 55+ | ✅ Полностью совместим |
| Сафари 12.1+ | ✅ Совместимость |
| Край 79+ | ✅ Полностью совместим |
API Intersection Observer поддерживает Nnewa только в современных браузерах. Полифилл необходим, если вам нужна поддержка IE11.