Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

244
Vistas
Agregar/eliminar clase a div si la sección está en la ventana gráfica (vanilla JS)

Tengo un onepager con 5 secciones, cada una con una altura mínima de 100vh y una identificación. Luego hay un div de fondo fijo que cambia su estado cuando una nueva sección entra en la ventana gráfica.

 <div class="background"></div> <section id="s1">...</section> <section id="s2">...</section> <section id="s3">...</section> <section id="s4">...</section> <section id="s5">...</section>

Quería actualizar el div de fondo con una clase con el nombre de la identificación de la sección actual cuando la sección ingresa a la ventana gráfica y eliminarla cuando la sección sale de la ventana gráfica.

Esto es lo que hice:

 const sections = document.querySelectorAll('section') const bg = document.querySelector('div.background') document.addEventListener('scroll', updateBg) function updateBg() { sections.forEach((section) => { const pixels = window.pageYOffset const sectionId = section.getAttribute('id') const offsetBottom = section.offsetTop + section.offsetHeight if (section.offsetTop <= pixels) { bg.classList.add(sectionId) } else if (offsetBottom >= pixels) { bg.classList.remove(sectionId) } else { bg.classList.remove(sectionId) } }) }

Agregar la clase actual cuando la sección ingresa a la ventana gráfica funciona bien. Pero no elimina las clases cuando las secciones han salido de la ventana gráfica como declaré en mi declaración else if (offsetBottom >= pixels) . Cuando me desplacé completamente hacia abajo en la página, tengo algo como esto:

<div class="background s1 s2 s3 s4 s5"></div>

pero lo que quiero al final es esto: <div class="background s5"></div>

¿alguna ayuda?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Tus condiciones parecen estar fuera de orden. Está configurando la clase para todas las secciones que están por debajo del umbral de desplazamiento. En su lugar, debe agregar la clase si parte de la sección está visible y eliminarla de lo contrario, así:

 if (section.offsetTop <= pixels && offsetBottom > pixels) { bg.classList.add(sectionId); } else { bg.classList.remove(sectionId) }

Además, lea la respuesta a esta pregunta: ¿Cómo puedo saber si un elemento DOM está visible en la ventana gráfica actual? Se recomienda utilizar la API getBoundingClientRect en su lugar.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda