Vue實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽(tīng)頁(yè)面寬度高度變化
vue監(jiān)聽(tīng)頁(yè)面寬高
運(yùn)用的主要技術(shù):watch監(jiān)聽(tīng)
話不多說(shuō)直接上代碼,自行研究
<template> <div class="rightContainer"> <h1>監(jiān)聽(tīng)頁(yè)面寬高</h1> <h2>當(dāng)前整個(gè)頁(yè)面寬度{{ windowWidth }}px</h2> <h2>當(dāng)前整個(gè)頁(yè)面高度{{ windowHeight }}px</h2> </div> </template> <script> export default { name: 'WatchsHW', data() { return { windowHeight: document.body.clientHeight, windowWidth: document.body.clientWidth } }, watch: { // 監(jiān)聽(tīng)頁(yè)面高度 windowHeight(val) { console.log('實(shí)時(shí)屏幕高度:', val, this.windowHeight) }, // 監(jiān)聽(tīng)頁(yè)面寬度 windowWidth(val) { console.log('實(shí)時(shí)屏幕寬度:', val, this.windowHeight) } }, mounted() { // <!--把window.onresize事件掛在到mounted函數(shù)上--> window.onresize = () => { return (() => { this.windowHeight = document.documentElement.clientHeight // 高 this.windowWidth = document.documentElement.clientWidth // 寬 })() } }, methods: { } } </script> <style lang="scss" scoped> .rightContainer{ width: 100%; text-align: center; overflow: hidden; } </style>
知識(shí)補(bǔ)充
除了上文的方法,小編還為大家整理了一些Vue實(shí)時(shí)監(jiān)聽(tīng)的其他方法,希望對(duì)大家有所幫助
Watch
watch的作用可以監(jiān)控一個(gè)值的變換,并調(diào)用因?yàn)樽兓枰獔?zhí)行的方法??梢酝ㄟ^(guò)watch動(dòng)態(tài)改變關(guān)聯(lián)的狀態(tài)。
簡(jiǎn)單點(diǎn)說(shuō),就是實(shí)時(shí)監(jiān)聽(tīng)某個(gè)數(shù)據(jù)的變化。
1、普通監(jiān)聽(tīng)
<template> <!-- 監(jiān)聽(tīng)屬性 --> <div> <p>{{num}}</p> <button @click="num++">按鈕</button> </div> </template> <script> export default { data () { return { num:30 } }, watch:{ // 第1種格式: // num(newVal,oldVal){ // // 什么時(shí)候執(zhí)行, num的值發(fā)生變化的時(shí)候,就執(zhí)行這里的代碼 // console.log("num被修改了",newVal,oldVal); // }, // 第2種格式: num:{ handler(newVal,oldVal){ // 什么時(shí)候執(zhí)行, num的值發(fā)生變化的時(shí)候,就執(zhí)行這里的代碼 console.log("num被修改了",newVal,oldVal); } } } } </script> <style lang = "less" scoped> </style>
2、立即監(jiān)聽(tīng)
如果我們需要在最初綁定值的時(shí)候也執(zhí)行函數(shù),則就需要用到immediate屬性。
<template> <!-- 立即監(jiān)聽(tīng) --> <div> <p>{{num}}</p> <button @click="num++">按鈕</button> </div> </template> <script> export default { data () { return { num:30 } }, watch:{ num:{ handler(newVal,oldVal){ // 什么時(shí)候執(zhí)行, num的值發(fā)生變化的時(shí)候,就執(zhí)行這里的代碼 console.log("num被修改了",newVal,oldVal); }, immediate:true // 立即監(jiān)聽(tīng) } } } </script> <style lang = "less" scoped> </style>
immediate需要搭配handler一起使用,其在最初綁定時(shí),調(diào)用的函數(shù)也就是這個(gè)handler函數(shù)。
3、深度監(jiān)聽(tīng)
當(dāng)需要監(jiān)聽(tīng)一個(gè)對(duì)象的改變時(shí),普通的watch方法無(wú)法監(jiān)聽(tīng)到對(duì)象內(nèi)部屬性的改變,只有data中的數(shù)據(jù)才能夠監(jiān)聽(tīng)到變化,此時(shí)就需要deep屬性對(duì)對(duì)象進(jìn)行深度監(jiān)聽(tīng)。
<template> <!-- 深度監(jiān)聽(tīng) --> <div> <p>{{obj.age}}</p> <button @click="obj.age++">按鈕</button> </div> </template> <script> export default { data () { return { obj:{ name:"Vue", age:7 } } }, watch:{ // obj:{ // handler(newVal,oldVal){ // // 什么時(shí)候執(zhí)行, obj中一旦有屬性發(fā)生變化,就會(huì)執(zhí)行這里的代碼 // console.log("name或者age被修改了",newVal,oldVal); // }, // deep:true // } "obj.age":{ handler(newVal,oldVal){ // 什么時(shí)候執(zhí)行, age被修改的時(shí)候來(lái)執(zhí)行 console.log("age被修改了",newVal,oldVal); }, } } } </script> <style lang = "less" scoped> </style>
注意:
1、如果監(jiān)聽(tīng)的數(shù)據(jù)是一個(gè)對(duì)象,那么 immediate: true失效;
2、一般使用于對(duì)引用類型的監(jiān)聽(tīng),深度監(jiān)聽(tīng),如監(jiān)聽(tīng)一個(gè)Object,只要Object里面的任何一個(gè)字段發(fā)生變化都會(huì)被監(jiān)聽(tīng),但是比較消耗性能,根據(jù)需求使用,能不用則不用。
3、因?yàn)樯厦娲aobj是引用數(shù)據(jù)類型,val, oldVal指向一致,導(dǎo)致看到的結(jié)果一樣。
4、deep優(yōu)化
我們可以通過(guò)點(diǎn)語(yǔ)法獲取對(duì)象中的屬性,然后轉(zhuǎn)為字符串,即是對(duì)深度監(jiān)聽(tīng)的優(yōu)化
<template> <div class="home"> <h3>{{obj.age}}</h3> <button @click="btnClick">按鈕</button> </div> </template> <script> export default { name: "Home", data() { return { obj: { name: "Lucy", age: 13 } }; }, methods: { btnClick() { this.obj.age = 33; } }, watch: { // 通過(guò)點(diǎn)語(yǔ)法獲取對(duì)象中的屬性,然后轉(zhuǎn)為字符串,即是對(duì)深度監(jiān)聽(tīng)的優(yōu)化 "obj.age": { handler(val, oldVal) { console.log(val, oldVal); }, deep: true, immediate: true, // 此時(shí)監(jiān)聽(tīng)的數(shù)據(jù)不是一個(gè)對(duì)象,可以使用immediate } } }; </script>
到此這篇關(guān)于Vue實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽(tīng)頁(yè)面寬度高度變化的文章就介紹到這了,更多相關(guān)Vue實(shí)時(shí)監(jiān)聽(tīng)頁(yè)面寬高內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue axios sessionID每次請(qǐng)求都不同的原因以及修改方式
這篇文章主要介紹了vue axios sessionID每次請(qǐng)求都不同的原因以及修改方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12vue 使用element-ui中的Notification自定義按鈕并實(shí)現(xiàn)關(guān)閉功能及如何處理多個(gè)通知
這篇文章主要介紹了vue 使用element-ui中的Notification自定義按鈕并實(shí)現(xiàn)關(guān)閉功能及如何處理多個(gè)通知,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08VueJs中toRef與toRefs函數(shù)對(duì)比詳解
這篇文章主要為大家介紹了VueJs中toRef與toRefs函數(shù)對(duì)比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03elementui中el-row的el-col排列混亂問(wèn)題及解決
這篇文章主要介紹了elementui中el-row的el-col排列混亂問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08這15個(gè)Vue指令,讓你的項(xiàng)目開(kāi)發(fā)爽到爆
這篇文章主要介紹了這15個(gè)Vue指令,讓你的項(xiàng)目開(kāi)發(fā)爽到爆,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-10-10詳解新手使用vue-router傳參時(shí)注意事項(xiàng)
這篇文章主要介紹了詳解新手使用vue-router傳參時(shí)注意事項(xiàng),詳細(xì)的介紹了幾種常見(jiàn)錯(cuò)誤,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Vue使用echarts的完整步驟及解決各種報(bào)錯(cuò)
最近在項(xiàng)目中需要對(duì)數(shù)據(jù)進(jìn)行可視化處理,而眾所周知echarts是非常強(qiáng)大的插件,下面這篇文章主要給大家介紹了關(guān)于Vue使用echarts的完整步驟及解決各種報(bào)錯(cuò)的相關(guān)資料,需要的朋友可以參考下2022-05-05vue3+ts+vite2項(xiàng)目實(shí)戰(zhàn)踩坑記錄
最近嘗試上手Vue3+TS+Vite,對(duì)比起Vue2有些不適應(yīng),但還是真香,下面這篇文章主要給大家介紹了關(guān)于vue3+ts+vite2項(xiàng)目的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09Vue?如何關(guān)掉響應(yīng)式問(wèn)題
這篇文章主要介紹了Vue?如何關(guān)掉響應(yīng)式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09