vue中的addEventListener和removeEventListener用法說明

addEventListener和removeEventListener用法說明

1、添加監聽事件(addEventListener)

語法:element.addEventListener(event, function, useCapture)

  • event:指定事件名(註意: 不要使用 "on" 前綴。 例如,使用 "click" ,而不是使用 "onclick")
  • function:指定要事件觸發時執行的函數(事件對象會作為第一個參數傳入函數)
  • useCapture:指定事件是否在捕獲或冒泡階段執行,默認false(true – 事件句柄在捕獲階段執行,false-事件句柄在冒泡階段執行)
mounted() {
    window.addEventListener("resize", this.setNavLeft);
},
methods: {
    listenerFunction(e) {
      document.addEventListener("scroll", this.handleScroll, true);
    },
}

2、移出監聽事件(removeEventListener)

語法:element.removeEventListener(event, function, useCapture)

註意:在vue中銷毀事件監聽,一定要在destroyed生命周期中執行,在 beforeDestroy到destroyed之間,執行組件事件拆卸,在beforeDestroy中執行事件銷毀是成功不瞭的

destroyed() {
    document.removeEventListener("scroll", this.handleScroll, true);
    window.removeEventListener("resize", this.setNavLeft);
  },

使用addEventListener添加事件、removeEventListener移除事件

最近在項目中需要用到addEventListener監聽滾動條滾動的高度,所以就研究瞭一下在vue中是怎麼進行事件監聽的。

添加事件

給要添加事件的元素加上ref屬性

在mounted中添加事件

    mounted() {
      this.$refs.box.addEventListener('scroll',()=>{
        console.log('scroll',this.$refs.box.scrollTop)
      });
    }

這樣就添加成功瞭!

移除事件

如果要移除已添加的事件,removeEventListener中傳入的方法必須和addEventListener中傳入的是同一個方法才能成功移除,所以在添加時就不能用匿名函數啦。需改成如下寫法

    mounted() {
      this.$refs.box.addEventListener('scroll',this.scrollEvent);
    },
    methods:{
      scrollEvent(){
        console.log('scroll',this.$refs.box.scrollTop)
      }
    }

這裡要註意 傳入的方法 this.scrollEvent 後面不能加括號,否則無法成功添加

組件銷毀前移除事件

    beforeDestroy() {
      this.$refs.box.removeEventListener('scroll',this.scrollEvent);
    }

如果是keep-alive組件,可以用下面這種方式

  activated() {
    this.$refs.box.addEventListener('scroll', this.scrollEvent);
  },
  deactivated(){
    this.$refs.box.removeEventListener('scroll',this.scrollEvent);
  },

另外,addEventListener還可以給一個元素添加多個事件,並且不會覆蓋已存在的事件,這裡就不多展開瞭~

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: