SSENSE/vue-carousel

Bug: Missing cleanup of resize listener

Aberta

#385 aberto em 11 de mar. de 2019

 (4 comentários) (1 reação) (0 responsável)JavaScript (513 forks)batch import
buggood first issue

Métricas do repositório

Stars
 (1.705 estrelas)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

Bug Report

Currently in the mounted() hook of Carousel.vue, an event listener is attached to window,

  window.addEventListener(
    "resize",
    debounce(this.onResize, this.refreshRate)
  );

But there is no equivalent removeEventListener call in the beforeDestroy() hook.

  beforeDestroy() {
    this.detachMutationObserver();
    window.removeEventListener("resize", this.getBrowserWidth);
    this.$refs["VueCarousel-inner"].removeEventListener(
      this.transitionstart,
      this.handleTransitionStart
    );
    this.$refs["VueCarousel-inner"].removeEventListener(
      this.transitionend,
      this.handleTransitionEnd
    );
    this.$refs["VueCarousel-wrapper"].removeEventListener(
      this.isTouch ? "touchstart" : "mousedown",
      this.onStart
    );
  }

This results in a buildup of listeners on the window object when a page is navigated to and away from multiple times via routing.

Guia do colaborador