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

114
Views
getBoundingClientRect devuelve resultados incorrectos al cambiar de ruta

Estoy usando este gancho para obtener el desplazamiento desde la parte superior de la página hasta la parte superior de un elemento. Parecía funcionar bien hasta que comencé a navegar a través de las rutas de mi página de enrutador de reacción.

 const usePosition = () => { const [dimensions, setDimensions] = useState({ height: window.innerHeight, width: window.innerWidth, }); const [offsets, setOffsets] = useState({ offsetTop: 0, offsetBottom: 0, }); const ref = useRef(); const handleResize = () => { setDimensions({ height: window.innerHeight, width: window.innerWidth, }); }; useLayoutEffect(() => { const position = ref.current.getBoundingClientRect(); setOffsets({ offsetTop: window.pageYOffset + position.top, offsetBottom: window.pageYOffset + position.bottom, }); window.addEventListener("resize", handleResize); return () => window.removeEventListener("resize", handleResize); }, [ref, dimensions, setOffsets]); return [ref, offsets, dimensions]; }; export default usePosition;

Al cargar el sitio web, este elemento ImagesBanner funcionaría bien, pero cuando me iría y luego volvería a la ruta con mi ImagesBanner, getBoundingClientRect(); devuelve un valor superior e inferior incorrecto, por lo tanto, descarta la animación.

 const ImagesBanner = () => { const [images, setImages] = useState([]); const [ref, offsets, dimensions] = usePosition(); const { scrollY } = useViewportScroll(); const fetchImages = async () => { const images = await getClientImages(); setImages(images); }; const transformX = useTransform( scrollY, [offsets.offsetTop - dimensions.height, offsets.offsetBottom], [ (images.length * 450 - 200) * -1 + dimensions.width / 2, images.length * 450 - 200 - dimensions.width / 2, ] ); useEffect(() => { fetchImages(); }, []); return ( <div className="images-banner"> <div className="images-banner__title"> <h2 className="heading">Our Clients</h2> </div> <motion.div className="images-banner__slider" ref={ref} style={{ left: transformX }} > {images.map((image) => ( <div key={image.node.id} className="images-banner__slide"> <img src={image.node.logo.url} alt={image.node.client} /> </div> ))} </motion.div> </div> ); }; export default ImagesBanner;

Cualquier ayuda sería muy apreciada.

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