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

192
Vistas
Cómo usar el observador de intersección para agregar clase a elemento hasta que se alcance el siguiente elemento, luego agregar clase a ese, etc.

Quiero usar un observador de intersección para ver cuándo se ha llegado a cierta parte de mi página. Mi página está dividida por algunas secciones con identificadores, por ejemplo, #sección1, #sección2, #sección3, etc.

En la parte superior de mi página hay un menú fijo con botones para navegar a cada sección. Quiero resaltar el botón que un usuario está viendo actualmente.

Entonces, cuando se desplace a la sección 1, resalte el botón de la sección 1, pero cuando se desplace hacia abajo, manténgalo resaltado hasta que se alcance la sección 2 (con un pequeño desplazamiento, tal vez 300 px para que el usuario se desplace un poco más allá del divisor hasta que se resalte), luego resalte ese botón .

¿Cómo se puede hacer esto?

Yo hice esto:

 function selectElementById(idname) { return document.querySelector(`#${idname}`); } const sections = [ selectElementById('top'), selectElementById('bestellen'), selectElementById('informatie'), selectElementById('inspiratie'), selectElementById('reviews'), ]; const navItems = { top: selectElementById('topbtn'), bestellen: selectElementById('bestellenbtn'), informatie: selectElementById('informatiebtn'), inspiratie: selectElementById('inspiratiebtn'), reviews: selectElementById('reviewsbtn'), }; const observerOptions = { root: null, rootMargin: '-175px 0px 0px 0px', threshold: 0.7, }; function observerCallback(entries, observer) { entries.forEach((entry) => { if (entry.isIntersecting) { // get the nav item corresponding to the id of the section // that is currently in view const navItem = navItems[entry.target.id]; // add 'active' class on the navItem navItem.classList.add('activeprodmenu'); // remove 'active' class from any navItem that is not // same as 'navItem' defined above Object.values(navItems).forEach((item) => { if (item != navItem) { item.classList.remove('activeprodmenu'); } }); } }); } const observer = new IntersectionObserver(observerCallback, observerOptions); sections.forEach((sec) => observer.observe(sec));

Pero recibo este error: Failed to execute 'observe' on 'IntersectionObserver': parameter 1 is not of type 'Element'.

about 4 years ago · Juan Pablo Isaza
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