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。
推薦閱讀:
- Vue中使用addEventListener添加事件、removeEventListener移除事件的示例詳解
- React實現監聽粘貼事件並獲取粘貼板中的截圖
- Vue實現監聽某個元素滾動,親測有效
- vue中引入mousewheel事件及兼容性處理方式
- VUE生命周期全面系統詳解