解決vue 給window添加和移除resize事件遇到的坑
在vue項(xiàng)目中需要監(jiān)聽window窗口變化來時(shí)時(shí)計(jì)算圖片的高度,于是就加了一個(gè)監(jiān)聽事件;確實(shí)監(jiān)聽到了,但是在離開當(dāng)前頁面進(jìn)入其他頁面改變窗口大小時(shí)發(fā)現(xiàn)window還是處于監(jiān)聽狀態(tài),即移除監(jiān)聽事件并沒有生效。
//之前的寫法,這樣寫移除監(jiān)聽事件無效 mounted(){ window.addEventListener(’resize’,()=>{ ’改變窗口大小時(shí)需要做的處理’ }); }, beforeDestroy() { window.removeEventListener('resize'); }
后來查找相關(guān)資料后發(fā)現(xiàn)用下面這種寫法可以移除監(jiān)聽
methods: { listenResize(){ ’窗口大小改變時(shí)的操作’ } }, mounted(){ window.addEventListener(’resize’,this.listenResize); }, beforeDestroy() { window.removeEventListener('resize',this.listenResize); }
補(bǔ)充知識(shí):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)切換到其他的頁面的時(shí)候,屏幕改變的時(shí)候還是會(huì)觸發(fā) resize 事件,因?yàn)橹皩戇^類似功能,代碼是沒有問題的,但是就是會(huì)觸發(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ù),否則會(huì)報(bào) this undefined 的問題
以上這篇解決vue 給window添加和移除resize事件遇到的坑就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. JSP的Cookie在登錄中的使用2. asp(vbscript)中自定義函數(shù)的默認(rèn)參數(shù)實(shí)現(xiàn)代碼3. HTML5 Canvas繪制圖形從入門到精通4. 使用Spry輕松將XML數(shù)據(jù)顯示到HTML頁的方法5. 利用CSS3新特性創(chuàng)建透明邊框三角6. ASP基礎(chǔ)知識(shí)VBScript基本元素講解7. 詳解CSS偽元素的妙用單標(biāo)簽之美8. XHTML 1.0:標(biāo)記新的開端9. php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究10. XML入門的常見問題(四)
