解決vue 給window添加和移除resize事件遇到的坑
在vue項目中需要監(jiān)聽window窗口變化來時時計算圖片的高度,于是就加了一個監(jiān)聽事件;確實監(jiān)聽到了,但是在離開當(dāng)前頁面進(jìn)入其他頁面改變窗口大小時發(fā)現(xiàn)window還是處于監(jiān)聽狀態(tài),即移除監(jiān)聽事件并沒有生效。
//之前的寫法,這樣寫移除監(jiān)聽事件無效
mounted(){
window.addEventListener('resize',()=>{
'改變窗口大小時需要做的處理'
});
},
beforeDestroy() {
window.removeEventListener("resize");
}
后來查找相關(guān)資料后發(fā)現(xiàn)用下面這種寫法可以移除監(jiān)聽
methods: {
listenResize(){
'窗口大小改變時的操作'
}
},
mounted(){
window.addEventListener('resize',this.listenResize);
},
beforeDestroy() {
window.removeEventListener("resize",this.listenResize);
}
補充知識:vue 監(jiān)聽屏幕變化 & 銷毀監(jiān)聽事件
記一次小坑.
由于用到 echarts 需要自適應(yīng)屏幕,所以在vue中用了監(jiān)聽事件并且考慮到性能問題,所以用lodash 庫的 debounce 做了包裹.代碼如下:
mounted() {
window.addEventListener('resize', debounce(this.resize,200), true)
},
beforeDestroy() {
window.removeEventListener('resize', this.resize, true)
},
methods: {
resize() {
this.radarChart.resize()
}
}
然而發(fā)現(xiàn)切換到其他的頁面的時候,屏幕改變的時候還是會觸發(fā) resize 事件,因為之前寫過類似功能,代碼是沒有問題的,但是就是會觸發(fā),心里也是覺得奇怪,研究了一下,發(fā)現(xiàn) addEventListener 的方法里面不加 debounce 就可以了.如下:
mounted() {
window.addEventListener('resize', this.resize, true)
},
beforeDestroy() {
window.removeEventListener('resize', this.resize, true)
},
methods: {
resize: debounce(function() {
this.radarChart.resize()
}, 300),
}
debounce 需要加在 methods 里面.并且內(nèi)部函數(shù)體不能使用箭頭函數(shù),否則會報 this undefined 的問題
以上這篇解決vue 給window添加和移除resize事件遇到的坑就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue el-switch綁定數(shù)值時需要注意的問題
在Vue中使用`el-switch`組件時,綁定數(shù)值類型時應(yīng)使用布爾值(true/false),而綁定字符串類型時應(yīng)使用字符串('true'/'false')2024-12-12
Vue3?在<script?setup>里設(shè)置組件name屬性的方法
這篇文章主要介紹了Vue3?在<script?setup>里設(shè)置組件name屬性的方法,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-11-11
vue中modal傳輸數(shù)據(jù)并刷新部分頁面數(shù)據(jù)方式
這篇文章主要介紹了vue中modal傳輸數(shù)據(jù)并刷新部分頁面數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04
vue-router如何實時動態(tài)替換路由參數(shù)(地址欄參數(shù))
這篇文章主要介紹了vue-router如何實時動態(tài)替換路由參數(shù)(地址欄參數(shù)),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09

