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

314
Visualizações
Cómo eliminar un eventListener (window.removeEventListener) en Vue 2, cuando se cumple cierta condición

Código:-

 <template> // html </template> <script> import _ from "lodash"; data() { return { renderComponent: false, }; }, watch: { // when this property is true, want to stop calling scroll event with this.onScroll method renderComponent(val) { if(val === true) { console.log("////////I am removing you"); window.removeEventListener('scroll', this.onScroll); } } }, methods: { onScroll() { console.log("I am called////////"); let similarTickerHeading = this.$refs.similarTicker; if(similarTickerHeading) { let margin = similarTickerHeading.getBoundingClientRect().top; let innerHeigth = window.innerHeight; console.log("Window Screen", innerHeigth); console.log("Component located", margin); // when this condition is true, I want to stop listening for the scroll event with this (onScroll method) if(margin - innerHeigth < 850) { console.log("I should start loading the actual component"); this.renderComponent = true; this.$vs.loading.close("#loader-example > .con-vs-loading"); // removing eventListener for scrolling with the onScroll Method window.removeEventListener('scroll', this.onScroll); } } } }, mounted() { this.renderComponent = false; this.$vs.loading({ container: "#loader-example", type: "point", scale: 0.8, }); this.$nextTick(function() { window.addEventListener('scroll', _.throttle(this.onScroll,250)); this.onScroll(); }) }, beforeDestroy() { window.removeEventListener('scroll', this.onScroll); }, </script>

En el código anterior, quiero dejar de escuchar el evento de desplazamiento con el método onScroll cuando mi bloque if en el método onScroll se vuelve verdadero. Pero, aún así, se llama al método onScroll cada vez que me desplazo aunque intenté eliminar eventListener . Incluso creé un observador para eliminar eventListener , pero el método sigue siendo llamado en el desplazamiento.

¿Cómo puedo eliminar el scroll eventListener con el método onScroll ?

ACTUALIZACIÓN : si elimino la limitación y _.throttle , el evento de desplazamiento se elimina. Debido al uso de _.throttle , no puedo eliminar el detector de eventos de desplazamiento.

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La referencia de función que se pasa a window.addEventListener() debe ser la misma referencia que se pasa a window.removeEventListener() . En su caso, hay dos referencias diferentes porque ha envuelto una de ellas con _.throttle() .

Solución

Guarde en caché la referencia de la función pasada a addEventListener() para que pueda usarse más tarde para removeEventListener() :

 export default { mounted() { 👇 this._scrollHandler = _.throttle(this.onScroll, 250) this.$nextTick(() => { 👇 window.addEventListener('scroll', this._scrollHandler); this.onScroll(); }) }, beforeDestroy() { 👇 window.removeEventListener('scroll', this._scrollHandler); }, }

manifestación

about 4 years ago · Santiago Trujillo Relatório
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