淺談VUE監(jiān)聽窗口變化事件的問題
Vuejs 本身就是一個(gè) MVVM 的框架。但是在監(jiān)聽 window 上的 事件 時(shí),往往會(huì)顯得 力不從心。
比如 這次是 window.resize恩,我做之前也是百度了一下??吹酱蠹一锒紴檫@個(gè)問題而發(fā)愁。
問題: 今天我也 遇到了這樣一個(gè)問題, 是關(guān)于canvas 自適應(yīng)。 根據(jù)窗口的變化去變化 canvas 的寬度備注: 重要的問題說三遍 解決 框架內(nèi)的bug 先說 框架 版本 版本 版本 (這里用的 Vue 2.x 、ES6)
解決方案:
第一步: 先在 data 中去 定義 一個(gè)記錄寬度是 屬性
data: {
screenWidth: document.body.clientWidth // 這里是給到了一個(gè)默認(rèn)值 (這個(gè)很重要)
}
第二步: 我們需要 講 reisze 事件在 vue mounted 的時(shí)候 去掛載一下它的方法
mounted () {
const that = this window.onresize = function() {
return function(){
window.screenWidth = document.body.clientWidth;
that.screenWidth = window.screenWidth
})()
}
}
第三步: watch 去監(jiān)聽這個(gè) 屬性值的變化,如果發(fā)生變化則講這個(gè)val 傳遞給this.screenWidth
watch: {
screenWidth (val) {
this.screenWidth = val
}
}
第四步:優(yōu)化 因?yàn)?頻繁 觸發(fā) resize 函數(shù),導(dǎo)致頁面很卡的 問題
watch: {
screenWidth (val) {
if (!this.timer) {
this.screenWidth = val
this.timer = true
let that = this
setTimeout(function () {
// that.screenWidth = that.$store.state.canvasWidth
console.log(that.screenWidth)
that.init()
that.timer = false
}, 400)
}
}
}
最后一步: 去看看你想要的結(jié)果吧~
以上這篇淺談VUE監(jiān)聽窗口變化事件的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue-treeselect及el-tree點(diǎn)擊節(jié)點(diǎn)獲取上級(jí)節(jié)點(diǎn)的數(shù)據(jù)方式
這篇文章主要介紹了vue-treeselect及el-tree點(diǎn)擊節(jié)點(diǎn)獲取上級(jí)節(jié)點(diǎn)的數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
vue高級(jí)組件之provide與inject使用及說明
這篇文章主要介紹了vue高級(jí)組件之provide與inject使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
vue實(shí)現(xiàn)echart餅圖legend顯示百分比的方法
本文主要介紹了vue實(shí)現(xiàn)echart餅圖legend顯示百分比的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

