Vue实现实时监听页面宽度高度变化
vue监听页面宽高
运用的主要技术:watch监听
话不多说直接上代码,自行研究
<template> <div class="rightContainer"> <h1>监听页面宽高</h1> <h2>当前整个页面宽度{{ windowWidth }}px</h2> <h2>当前整个页面高度{{ windowHeight }}px</h2> </div> </template> <script> export default { name: 'WatchsHW', data() { return { windowHeight: document.body.clientHeight, windowWidth: document.body.clientWidth } }, watch: { // 监听页面高度 windowHeight(val) { console.log('实时屏幕高度:', val, this.windowHeight) }, // 监听页面宽度 windowWidth(val) { console.log('实时屏幕宽度:', val, this.windowHeight) } }, mounted() { // <!--把window.onresize事件挂在到mounted函数上--> 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>
知识补充
除了上文的方法,小编还为大家整理了一些Vue实时监听的其他方法,希望对大家有所帮助
Watch
watch的作用可以监控一个值的变换,并调用因为变化需要执行的方法。可以通过watch动态改变关联的状态。
简单点说,就是实时监听某个数据的变化。
1、普通监听
<template> <!-- 监听属性 --> <div> <p>{{num}}</p> <button @click="num++">按钮</button> </div> </template> <script> export default { data () { return { num:30 } }, watch:{ // 第1种格式: // num(newVal,oldVal){ // // 什么时候执行, num的值发生变化的时候,就执行这里的代码 // console.log("num被修改了",newVal,oldVal); // }, // 第2种格式: num:{ handler(newVal,oldVal){ // 什么时候执行, num的值发生变化的时候,就执行这里的代码 console.log("num被修改了",newVal,oldVal); } } } } </script> <style lang = "less" scoped> </style>
2、立即监听
如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。
<template> <!-- 立即监听 --> <div> <p>{{num}}</p> <button @click="num++">按钮</button> </div> </template> <script> export default { data () { return { num:30 } }, watch:{ num:{ handler(newVal,oldVal){ // 什么时候执行, num的值发生变化的时候,就执行这里的代码 console.log("num被修改了",newVal,oldVal); }, immediate:true // 立即监听 } } } </script> <style lang = "less" scoped> </style>
immediate需要搭配handler一起使用,其在最初绑定时,调用的函数也就是这个handler函数。
3、深度监听
当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。
<template> <!-- 深度监听 --> <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){ // // 什么时候执行, obj中一旦有属性发生变化,就会执行这里的代码 // console.log("name或者age被修改了",newVal,oldVal); // }, // deep:true // } "obj.age":{ handler(newVal,oldVal){ // 什么时候执行, age被修改的时候来执行 console.log("age被修改了",newVal,oldVal); }, } } } </script> <style lang = "less" scoped> </style>
注意:
1、如果监听的数据是一个对象,那么 immediate: true失效;
2、一般使用于对引用类型的监听,深度监听,如监听一个Object,只要Object里面的任何一个字段发生变化都会被监听,但是比较消耗性能,根据需求使用,能不用则不用。
3、因为上面代码obj是引用数据类型,val, oldVal指向一致,导致看到的结果一样。
4、deep优化
我们可以通过点语法获取对象中的属性,然后转为字符串,即是对深度监听的优化
<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: { // 通过点语法获取对象中的属性,然后转为字符串,即是对深度监听的优化 "obj.age": { handler(val, oldVal) { console.log(val, oldVal); }, deep: true, immediate: true, // 此时监听的数据不是一个对象,可以使用immediate } } }; </script>
到此这篇关于Vue实现实时监听页面宽度高度变化的文章就介绍到这了,更多相关Vue实时监听页面宽高内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
全面解析vue router 基本使用(动态路由,嵌套路由)
路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的about 按钮,页面中就要显示about 的内容。这篇文章主要介绍了vue router 基本使用 ,需要的朋友可以参考下2018-09-09详解在vue-cli项目中使用mockjs(请求数据删除数据)
本篇文章主要介绍了在vue-cli项目中使用mockjs(请求数据删除数据),具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-10-10element-ui form表单的动态rules校验功能实现
在vue项目中,有时候可能会用到element-ui form表单的动态rules校验,这篇文章主要介绍了element-ui form表单的动态rules校验,我们可以巧妙的运用element-ui form表单里面form-item的校验规则来处理,本文结合实例代码介绍的非常详细,需要的朋友可以参考下2023-07-07
最新评论