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

575
Vistas
¿Cómo escuchar el evento de desplazamiento de la ventana en un componente VueJS?

Quiero escuchar el evento de desplazamiento de la ventana en mi componente Vue. Esto es lo que probé hasta ahora:

 <my-component v-on:scroll="scrollFunction"> ... </my-component>

Con scrollFunction(event) definido en mis métodos de componentes, pero parece que no funciona.

¿Alguien tiene alguna idea de cómo hacer esto?

¡Gracias!

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En realidad encontré una solución. Agrego un detector de eventos en el evento de scroll cuando se crea el componente y elimino el detector de eventos cuando se destruye el componente.

 export default { created () { window.addEventListener('scroll', this.handleScroll); }, destroyed () { window.removeEventListener('scroll', this.handleScroll); }, methods: { handleScroll (event) { // Any code to be executed when the window is scrolled } } }

¡Espero que esto ayude!

over 4 years ago · Santiago Trujillo Denunciar

0

En mi experiencia, el uso de un detector de eventos en el desplazamiento puede crear mucho ruido debido a la canalización en ese flujo de eventos, lo que puede causar problemas de rendimiento si está ejecutando una función handleScroll voluminosa.

A menudo uso la técnica que se muestra aquí en la respuesta mejor calificada, pero agrego rebote encima, generalmente alrededor de 100ms produce un buen rendimiento para la relación UX.

Aquí hay un ejemplo que usa la respuesta mejor calificada con el rebote de Lodash agregado:

 import debounce from 'lodash/debounce'; export default { methods: { handleScroll(event) { // Any code to be executed when the window is scrolled this.isUserScrolling = (window.scrollY > 0); console.log('calling handleScroll'); } }, mounted() { this.handleDebouncedScroll = debounce(this.handleScroll, 100); window.addEventListener('scroll', this.handleDebouncedScroll); }, beforeDestroy() { // I switched the example from `destroyed` to `beforeDestroy` // to exercise your mind a bit. This lifecycle method works too. window.removeEventListener('scroll', this.handleDebouncedScroll); } }

Intente cambiar el valor de 100 a 0 y 1000 para que pueda ver la diferencia en cómo/cuándo se llama handleScroll .

BONIFICACIÓN: también puede lograr esto de una manera aún más concisa y reutilizable con una biblioteca como vue-scroll . Es un gran caso de uso para que aprenda sobre las directivas personalizadas en Vue si aún no las ha visto. Consulte https://github.com/wangpin34/vue-scroll .

Este también es un excelente tutorial de Sarah Drasner en los documentos de Vue: https://vuejs.org/v2/cookbook/creating-custom-scroll-directives.html

Para usuarios de Vue 3

En vue3, debe usar unmounted o beforeUnmount, en lugar de beforeDestroy .

El enlace del ciclo de vida beforeDestroy no se emite en Vue3

over 4 years ago · Santiago Trujillo Denunciar

0

Esto es lo que funciona directamente con los componentes personalizados de Vue.

 <MyCustomComponent nativeOnScroll={this.handleScroll}>

o

 <my-component v-on:scroll.native="handleScroll">

y defina un método para handleScroll. ¡Sencillo!

over 4 years ago · Santiago Trujillo Denunciar
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