Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

187
Visualizações
Dirigirse a la intersección más cercana a la raíz cuando varios elementos se cruzan

Tengo una lista de secciones dentro de un contenedor ( root ), cada una observada por el mismo Intersection Observer.

Al hacer clic en un ancla en la navegación izquierda (roja), se desplaza a esa sección y la devolución de llamada del observador de la intersección actualiza el estado con la ID de la sección correspondiente. En resumen, estoy tratando de diseñar dinámicamente el ancla mientras me desplazo y navego, grabo la ID y la comparo con el atributo href .

Funciona como se esperaba siempre que solo una sección respete el umbral, pero a veces me enfrento a esta situación:

Dirigirse a la intersección más cercana a la raíz cuando varios elementos se cruzan

Al desplazarse hacia arriba (por ejemplo, de 4 clics a 2), funciona como se esperaba, el último ID de estado corresponde al atributo href en el que acabo de hacer clic.

Pero cuando me desplazo hacia abajo (por ejemplo, de 1 clic a 2), dado que 2, 3 y 4 están visibles, la última ID de sección establecida en el estado corresponde a la sección #4.

¿Hay alguna forma de apuntar siempre a la entrada más cercana a la raíz?

 export const Main = () => { const sectionRefs = useRef([]); const observerRef = useRef(null); const [intersectionId, setIntersectionId] = useIntersection(); useEffect(() => { const intersectionCallback = (entries) => { entries.some((entry) => { if (entry.isIntersecting) { setIntersectionId(entry.target.id); return true; } }); }; observerRef.current = new IntersectionObserver(intersectionCallback, { root: document.getElementById('root'), threshold: 0.75, rootMargin: '0px 0px 0px 0px', }); examplesRefs.current.forEach((sectionElement) => { observerRef.current.observe(sectionElement); }); return () => { observerRef.current.disconnect(); }; }, [setIntersectionId]); return ( <Container id="root"> {examples.map(({ id }, index) => ( <Section key={id} id={id} ref={(child) => (sectionRefs.current[index] = child)} /> ))} </Container> ); };
about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda