Categoría · Interactivo Nivel de Dificultad · Intermedio Publicado el · 22 de enero de 2024

Contador Animado

Componente de contador animado suave con easing personalizable, múltiples formatos de números y intersection observer para rendimiento. Perfecto para secciones de estadísticas y logros.

#counter #animacion #estadisticas #numeros #scroll

Diseño Responsivo

Soporte para Modo Oscuro

líneas

553

Compatibilidad del Navegador

No

Vista Previa en Vivo

Interactúa con el componente sin salir de la página.

400px

Contador Animado

Un componente de contador animado sofisticado con animaciones de easing suaves, múltiples formatos de números y intersection observer para optimización de rendimiento. Perfecto para mostrar estadísticas, logros y métricas clave con impacto visual.

Características

  • Animaciones Suaves: Easing cúbico con duración personalizable
  • Múltiples Formatos: Números regulares, moneda, porcentajes y notación compacta
  • Auto-activación: Intersection Observer para animación basada en scroll
  • Animación Escalonada: Animaciones secuenciales de contadores para atractivo visual
  • Optimizado para Rendimiento: RequestAnimationFrame para animaciones a 60fps
  • Diseño Responsivo: Layout de grid adaptativo para todos los tamaños de pantalla
  • Accesibilidad: Amigable con lectores de pantalla con etiquetas ARIA apropiadas
  • Personalizable: Fácil de configurar objetivos, duraciones y formatos

Formatos de Números

  • Regular: Formateo estándar de números con soporte de localización
  • Moneda: Sufijos automáticos K/M para cantidades grandes
  • Compacto: Notación abreviada (1.5K, 2.3M)
  • Porcentaje: Control de precisión decimal
  • Prefijos/Sufijos Personalizados: Signos de dólar, símbolos de más, etc.

Características de Animación

  • Funciones de Easing: Transiciones cubic-bezier suaves
  • Retroalimentación Visual: Efectos de brillo durante la animación
  • Estados de Finalización: Animación de pulso cuando se alcanza el objetivo
  • Indicadores de Progreso: Anillos de carga opcionales
  • Control de Escalonamiento: Retraso personalizable entre contadores

Optimizaciones de Rendimiento

  • Intersection Observer para detección de viewport
  • RequestAnimationFrame para animaciones suaves
  • Manipulación eficiente del DOM
  • Prevención de memory leaks con métodos de limpieza
  • Eventos de scroll throttled

Opciones de Personalización

// Configuración de contador personalizado
const config = {
  target: 1500,
  duration: 3000,
  decimals: 1,
  format: 'compact',
  icon: '🎯',
  label: 'Objetivos Alcanzados',
  suffix: '+'
};

// Agregar contador personalizado
const grid = document.querySelector('.counter-grid');
const counter = createCounter(grid, config);

Personalización CSS

/* Esquema de colores personalizado */
.counter-card {
  background: rgba(tu-color, 0.1);
  border-color: rgba(tu-color, 0.2);
}

/* Duración de animación personalizada */
.counter-number {
  transition: all 0.5s ease;
}

/* Efectos de hover personalizados */
.counter-card:hover {
  transform: translateY(-15px) scale(1.02);
}

Métodos de API

const counter = new AnimatedCounter();

// Métodos de control
counter.startAllCounters();     // Iniciar todas las animaciones
counter.resetAllCounters();     // Reiniciar todos los contadores
counter.startCounter(0);        // Iniciar contador específico
counter.resetCounter(0);        // Reiniciar contador específico

// Agregar contador personalizado
counter.addCounter(element, 1000, 2000, {
  decimals: 2,
  format: 'currency'
});

// Monitoreo de rendimiento
const metrics = counter.getPerformanceMetrics();

// Limpieza
counter.destroy();

Soporte de Navegadores

  • Chrome 51+ (soporte completo)
  • Firefox 55+ (soporte completo)
  • Safari 12.1+ (soporte completo)
  • Edge 15+ (soporte completo)
  • iOS Safari 12.2+ (soporte completo)

Características de Accesibilidad

  • Estructura HTML semántica
  • Etiquetas ARIA para lectores de pantalla
  • Soporte de navegación por teclado
  • Compatibilidad con modo de alto contraste
  • Soporte para movimiento reducido

Casos de Uso

  • Secciones de Estadísticas: Logros y métricas de la empresa
  • Widgets de Dashboard: Visualización de datos en tiempo real
  • Páginas de Aterrizaje: Indicadores clave de rendimiento
  • Sitios de Portafolio: Conteos de proyectos y tasas de éxito
  • E-commerce: Cifras de ventas y conteos de clientes
  • Analytics: Métricas de engagement de usuarios

Ejemplos de Integración

<!-- Contador básico -->
<div class="counter-number" data-target="1000" data-duration="2000">0</div>

<!-- Contador de moneda -->
<div class="counter-number" 
     data-target="2500000" 
     data-duration="3000" 
     data-format="currency">0</div>

<!-- Contador de porcentaje -->
<div class="counter-number" 
     data-target="98.5" 
     data-duration="2500" 
     data-decimals="1">0</div>

HTML

58

líneas

CSS

248

líneas

JavaScript

247

líneas


                <div class="counter-container">
  <div class="counter-grid">
    <!-- Contador 1: Número Básico -->
    <div class="counter-card">
      <div class="counter-icon">👥</div>
      <div class="counter-number" data-target="1250" data-duration="2000">0</div>
      <div class="counter-label">Clientes Satisfechos</div>
      <div class="counter-suffix">+</div>
    </div>
    
    <!-- Contador 2: Porcentaje -->
    <div class="counter-card">
      <div class="counter-icon">📈</div>
      <div class="counter-number" data-target="98.5" data-duration="2500" data-decimals="1">0</div>
      <div class="counter-label">Tasa de Éxito</div>
      <div class="counter-suffix">%</div>
    </div>
    
    <!-- Contador 3: Número Grande con K -->
    <div class="counter-card">
      <div class="counter-icon">💼</div>
      <div class="counter-number" data-target="15000" data-duration="3000" data-format="compact">0</div>
      <div class="counter-label">Proyectos Completados</div>
      <div class="counter-suffix"></div>
    </div>
    
    <!-- Contador 4: Años de Experiencia -->
    <div class="counter-card">
      <div class="counter-icon">🏆</div>
      <div class="counter-number" data-target="12" data-duration="1500">0</div>
      <div class="counter-label">Años de Experiencia</div>
      <div class="counter-suffix"></div>
    </div>
    
    <!-- Contador 5: Ingresos con Moneda -->
    <div class="counter-card">
      <div class="counter-icon">💰</div>
      <div class="counter-prefix">\$</div>
      <div class="counter-number" data-target="2500000" data-duration="3500" data-format="currency">0</div>
      <div class="counter-label">Ingresos Generados</div>
      <div class="counter-suffix"></div>
    </div>
    
    <!-- Contador 6: Descargas -->
    <div class="counter-card">
      <div class="counter-icon">⬇️</div>
      <div class="counter-number" data-target="500000" data-duration="2800" data-format="compact">0</div>
      <div class="counter-label">Descargas Totales</div>
      <div class="counter-suffix">+</div>
    </div>
  </div>
  
  <!-- Botones de Control -->
  <div class="counter-controls">
    <button class="control-btn" id="startBtn">Iniciar Animación</button>
    <button class="control-btn" id="resetBtn">Reiniciar Contadores</button>
  </div>
</div>

              
58líneas
2289caracteres
HTMLIdioma

Fragmentos de Código Relacionados

Explora packs de plantillas

¿Necesitas bloques más grandes? Descubre landings y colecciones de componentes.

Abrir la biblioteca de plantillas →