🎬 Módulo 1: Parallax Scrolling

Añadiendo Profundidad Como una Película

Fondo Parallax (Fijo)

¿Qué es el Parallax Scrolling?

El parallax scrolling hace que los fondos se muevan más lento que el contenido en primer plano mientras desplazas. Es como mirar por la ventana de un auto: los árboles (fondo) se mueven más lento que la carretera (primer plano). Esto añade profundidad y hace que los sitios se sientan dinámicos.

Técnica 1: Fondo Fijo CSS

La propiedad CSS clave es background-attachment: fixed . Esto mantiene la imagen de fondo estacionaria mientras el contenido se desplaza sobre ella.

.parallax-bg {
  background-image: url('image.jpg');
  min-height: 400px;
  background-attachment: fixed;
  background-position: center;
  background-size: cover;
}

¿Por Qué Usarlo?

⚠️ Precauciones:

Reflexión Atelier: ¿El efecto parallax hace que esta página se sienta más "viva"? ¿Por qué sí o por qué no? ¿Mejora tu comprensión del contenido, o es puramente decorativo? Considera el equilibrio entre el interés visual y la accesibilidad.
Fondo con Scroll Normal

Comparación: Scroll Normal

La sección anterior usa background-attachment: scroll (el valor por defecto). Nota cómo se desplaza con el contenido en lugar de permanecer fijo. Este es el enfoque tradicional.

Diferencias Clave:

Consejo: ¡Desplázate hacia arriba y hacia abajo en esta página varias veces para realmente sentir la diferencia entre las secciones púrpura (parallax) y verde (normal)!

Consideraciones para Móviles

En dispositivos móviles, background-attachment: fixed a menudo no funciona debido a limitaciones del navegador. El CSS en este demo cambia automáticamente a scroll regular en pantallas más pequeñas para asegurar una buena experiencia para todos los usuarios.

Pregunta Crítica de Diseño: ¿El efecto parallax realmente mejora la experiencia del usuario, o podría ser una barrera? Considera a los usuarios con trastornos vestibulares que pueden experimentar incomodidad con los efectos de movimiento. ¿Cómo podríamos ofrecer alternativas o respetar la media query prefers-reduced-motion ?
🌌
☁️
JavaScript Parallax
Scroll para ver 3 capas moviéndose a diferentes velocidades

Técnica 2: Parallax con JavaScript y Múltiples Capas

La sección anterior usa JavaScript con transform: translateY() para mover tres capas separadas a diferentes velocidades. Esto crea un efecto de profundidad más sofisticado que el CSS puro.

Entendiendo el Sistema de 3 Capas

Cada capa tiene un atributo data-speed:

Paso 1: Estructura HTML con data-speed

<div class="parallax-js-section">
  <!-- Cada capa se mueve a diferente velocidad -->
  <div class="parallax-layer layer-back" data-speed="0.2">🌌</div>
  <div class="parallax-layer layer-middle" data-speed="0.5">☁️</div>
  <div class="parallax-layer layer-front" data-speed="0.8">Texto</div>
</div>

Paso 2: JavaScript lee data-speed y aplica transform

// 1. Seleccionar todas las capas
const parallaxLayers = document.querySelectorAll('.parallax-layer');

// 2. En el scroll, actualizar la posición de cada capa
function updateParallax() {
  parallaxLayers.forEach((layer) => {
    // Leer el valor de velocidad del atributo HTML
    const speed = parseFloat(layer.dataset.speed);
    
    // Calcular cuánto mover esta capa
    const scrolled = window.pageYOffset;
    const yPos = scrolled * speed * 0.5;
    
    // Aplicar la transformación
    layer.style.transform = `translateY(${yPos}px)`;
  });
}

// 3. Escuchar eventos de scroll eficientemente
window.addEventListener('scroll', () => {
  requestAnimationFrame(updateParallax);
}, { passive: true });

Ventajas de JavaScript Parallax:

⚠️ Consideraciones:

♿ Accesibilidad: Respetando las Preferencias del Usuario

⚠️ Importante: Sensibilidad al Movimiento

Los efectos parallax pueden causar mareos, náuseas o trastornos vestibulares en algunos usuarios. Es esencial respetar la media query prefers-reduced-motion.

¿Qué es prefers-reduced-motion?

prefers-reduced-motion es una media query de CSS que detecta si un usuario ha solicitado movimiento reducido en la configuración de su sistema operativo. Los usuarios pueden habilitar esto en:

Cómo este Demo lo Respeta

Este demo desactiva automáticamente los efectos parallax cuando los usuarios tienen habilitada la reducción de movimiento:

// 1. Detectar la preferencia de movimiento del usuario
const prefersReducedMotion = window.matchMedia(
  '(prefers-reduced-motion: reduce)'
);
let isReducedMotion = prefersReducedMotion.matches;

// 2. Desactivar parallax CSS si es necesario
function handleMotionPreference() {
  if (isReducedMotion) {
    // Cambiar fondos fijos a scroll normal
    document.querySelectorAll('.parallax-bg').forEach((el) => {
      el.style.backgroundAttachment = 'scroll';
    });
  }
}

// 3. No inicializar parallax JavaScript si hay movimiento reducido
function initParallax() {
  if (isReducedMotion) {
    console.log('Parallax desactivado: el usuario prefiere movimiento reducido');
    return; // Salir sin configurar animaciones
  }
  // ... resto del código parallax
}

// 4. Escuchar cambios de preferencia durante la sesión
prefersReducedMotion.addEventListener('change', (e) => {
  isReducedMotion = e.matches;
  // Actualizar animaciones según corresponda
});

Pruébalo Tú Mismo

  1. Abre las DevTools del navegador (F12)
  2. Ve a la pestaña Console y escribe: window.matchMedia('(prefers-reduced-motion: reduce)').matches
  3. Devuelve true si la reducción de movimiento está habilitada, false en caso contrario
  4. Habilita "Reducir movimiento" en la configuración de tu sistema operativo y recarga esta página
  5. ¡Nota cómo todos los efectos parallax están desactivados!

💡 Mejores Prácticas para Accesibilidad

3 capas de imágenes • Velocidades: lenta (0.3) → media (0.6) → rápida (0.9)

Técnica 3: Capas de Imágenes (Multi-layer)

La sección anterior combina múltiples imágenes de fondo moviéndose a diferentes velocidades para crear un efecto de profundidad 3D.

📊 Comparación de las 3 Técnicas:

Técnica Implementación Soporte Móvil Complejidad
CSS Fixed background-attachment: fixed ❌ Limitado ⭐ Muy simple
JS Transform transform: translateY() ✅ Funciona ⭐⭐ Medio
Multi-layer Múltiples elementos + JS ✅ Funciona ⭐⭐⭐ Avanzado
Reflexión Final: ¿Cuál técnica prefieres? La técnica CSS es perfecta para sitios simples. JavaScript ofrece control total pero requiere más código. Multi-layer crea los efectos más impresionantes pero puede afectar el rendimiento. La mejor elección depende de tu proyecto específico.