Vue实现实时监听页面宽度高度变化

 更新时间:2024年03月27日 15:32:51   作者:嫣嫣细语  
这篇文章主要为大家详细介绍了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计算属性与监听器的区别和用途

    深入探讨Vue计算属性与监听器的区别和用途

    在Vue的开发中,计算属性(Computed Properties)和监听器(Watchers)是两种非常重要的概念,它们都用于响应式地处理数据变化,本文将带你深入了解计算属性和监听器的区别,以及在何时使用它们,感兴趣的朋友可以参考下
    2023-09-09
  • Vue3.0组件通信mitt源码ts实例解析

    Vue3.0组件通信mitt源码ts实例解析

    这篇文章主要为大家介绍了Vue3.0组件通信mitt源码ts实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Vue项目的网络请求代理到封装步骤详解

    Vue项目的网络请求代理到封装步骤详解

    这篇文章主要介绍了Vue项目的网络请求代理到封装步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • 如何为老vue项目添加vite支持详解

    如何为老vue项目添加vite支持详解

    Vite是一个开发环境工具,旨在提高我们的开发速度,下面这篇文章主要给大家介绍了关于如何为老vue项目添加vite支持的相关资料,需要的朋友可以参考下
    2021-09-09
  • Vue前端后端的交互方式 axios

    Vue前端后端的交互方式 axios

    这篇文章主要介绍了Vue前端后端的交互方式 axios,axios 为第三方数据请求库,下文具体的内容介绍需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-04-04
  • Vue利用插件实现打印功能的示例详解

    Vue利用插件实现打印功能的示例详解

    这篇文章主要为大家详细介绍了Vue如何利用vue-print-nb插件实现打印功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学一下
    2023-03-03
  • Vue3项目中引入ElementUI并使用的示例详解

    Vue3项目中引入ElementUI并使用的示例详解

    ElementUI是一个强大的PC端UI组件框架,它不依赖于vue,但是却是当前和vue配合做项目开发的一个比较好的ui框架,本文主要介绍了如何在vue3中引入使用ElementUI,需要的可以参考一下
    2023-06-06
  • vue2-elementUI部分组件样式修改方法

    vue2-elementUI部分组件样式修改方法

    这篇文章主要介绍了vue2-elementUI部分组件样式修改,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • vue3.0运行npm run dev报错Cannot find module node:url

    vue3.0运行npm run dev报错Cannot find module&

    本文主要介绍了vue3.0运行npm run dev报错Cannot find module node:url,因为使用的node版本是14.15.1低于15.0.0导致,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • elementui中树形表格切换展开不同层级的示例代码

    elementui中树形表格切换展开不同层级的示例代码

    这篇文章主要介绍了elementui中树形表格切换展开不同层级,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论