Publicado en• Publicado originalmente enjmalvarez.dev
Comprobar si un elemento está visible en la pantalla del usuario es muy fácil usando elAPI de observador de intersecciones. Esta API es compatible con todos los principales navegadores.
La API Intersection Observer nos permite detectar intersecciones de un elemento con otro elemento. En nuestro caso, vamos a observar las intercepciones entre un elemento React y la ventana gráfica del navegador.
Vamos a crear un enlace personalizado para que esto reutilice este código donde lo necesitemos.
En nuestro hook personalizado vamos a usaruseState
para almacenar el estado de intersección del elemento.
exportar función useIsVisible() { constante [isIntersecting, conjuntoIntersección] = useState(FALSO); devolver isIntersecting;}
El gancho necesita una referencia al elemento React que queremos observar. vamos a usar elárbitro
prop para pasar el elemento al gancho.
exportar función useIsVisible(árbitro) { constante [isIntersecting, conjuntoIntersección] = useState(FALSO); devolver isIntersecting;}
Finalmente, necesitamos crear una instancia deIntersecciónObservador
y observe el elemento. ElIntersecciónObservador
El constructor acepta una función de devolución de llamada como primer argumento que se llama cuando el elemento se cruza con la ventana gráfica.
vamos a usar elefecto de uso
gancho para hacer esto para evitar la creación de nuevos observadores en los renderizados.
exportar función useIsVisible(árbitro) { constante [isIntersecting, conjuntoIntersección] = useState(FALSO); efecto de uso(() => { constante observador = nuevo IntersecciónObservador(([entrada]) => conjuntoIntersección(entrada.isIntersecting) ); observador.observar(árbitro.actual); }, [árbitro]); devolver isIntersecting;}
Para mejorar el rendimiento, vamos a llamarIntersectionObserver.desconectar()para dejar de observar los cambios cuando se desmonta el componente o se pasa un nuevo elemento al gancho.
exportar función useIsVisible(árbitro) { constante [isIntersecting, conjuntoIntersección] = useState(FALSO); efecto de uso(() => { constante observador = nuevo IntersecciónObservador(([entrada]) => conjuntoIntersección(entrada.isIntersecting) ); observador.observar(árbitro.actual); devolver () => { observador.desconectar(); }; }, [árbitro]); devolver isIntersecting;}
Nuestro gancho está listo para ser utilizado. Para usarlo solo necesitamos llamarlo desde un componente de React y pasar una referencia al elemento que queremos comprobar si está visible o no.
exportar función micomponente() { constante árbitro = useRef(); constante es visible = useIsVisible(árbitro); devolver ( <división árbitro={árbitro}> <pag>{es visible ? "Visible" : "No visible"}pag> división> );}
Puedes ver un ejemplo de uso real de este gancho enMi sitio web. Estoy usando el enlace para detectar si el usuario se desplaza hasta la parte inferior de la página y luego carga los comentarios de una publicación de blog. Puede ver el código fuente del componente.aquí. Ingrese a cualquiera de las publicaciones del blog y desplácese hasta la parte inferior de la página para verlo en acción.
Referencias
Top Comentarios(8)
Suscribir
Un desarrollador de IoT y blockchain; interesado en la computación en la nube; amo la codificación...
-
Correo electrónico
yongchanghe8@gmail.com
-
Ubicación
Saskatoon, Saskatchewan
-
Educación
Informática, maestría, Universidad de Saskatchewan
-
Unido
¡Gracias por compartir!
Ingeniero de Software @ Shopify. +5 años de experiencia desarrollando software. Conocimientos Full-Stack con enfoque en desarrollo web.
-
Correo electrónico
jm.alvarez.vano@gmail.com
-
Ubicación
Valencia, España
-
Trabajar
Ingeniero de software @ Shopify
-
Unido
(Video) Animaciones en React con Intersection Observer y Custom Hook
¡Gracias por leerlo Yongchang!
Desarrollador 💻 | Escritor técnico 📝 @ThePracticalDev @Medium @Teelfeed @Hashnode @LinkedIn | Abierto a colaborar 🔓 | Entusiasta de la IA 🤑 | Atrapado 🔥 Codificación | 3.7 Suscriptores de blogs
-
Educación
Universidad de Hertfordshire
-
Trabajar
Charlemos sobre los proyectos de tu marca: Contáctame 👉 provideByGatsby@outlook.com
-
Unido
¡Gran contenido!
Ingeniero de Software @ Shopify. +5 años de experiencia desarrollando software. Conocimientos Full-Stack con enfoque en desarrollo web.
-
Correo electrónico
jm.alvarez.vano@gmail.com
-
Ubicación
Valencia, España
-
Trabajar
(Video) useRef explicado al detalle - Con 6 mini Apps - React - Scroll Animation Focus, Copy Paste y MásIngeniero de software @ Shopify
-
Unido
¡Gracias Helita!
Desarrollador freelance francés
-
Ubicación
Francia
-
Trabajar
Desarrollador líder en Niort
-
Unido
Muchas gracias !! ¿Qué hay del rendimiento?
Ingeniero de Software @ Shopify. +5 años de experiencia desarrollando software. Conocimientos Full-Stack con enfoque en desarrollo web.
-
Correo electrónico
jm.alvarez.vano@gmail.com
-
Ubicación
(Video) Trigger a Function when Scrolling to an Element in React with Intersection ObserverValencia, España
-
Trabajar
Ingeniero de software @ Shopify
-
Unido
El rendimiento es bueno. La devolución de llamada que se pasa a la instancia de IntersectionObserver solo se llama cuando cambia el estado de la intersección (es decir, solo se llama cuando el componente se vuelve visible y cuando se vuelve invisible).
Autor de Typetron. Apasionado del desarrollo web. Aficionado a las mecanografiadas.
-
Unido
¿Qué pasa si el elemento ref se representa condicionalmente más tarde? Tu gancho personalizado no funcionará
esto me ayuda mucho :) gracias!
Para otras acciones, puede considerar bloquear a esta persona y/oreportar abuso