Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

251
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!