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

 更新时间:2024年03月27日 15:32:51   作者:嫣嫣细语  
这篇文章主要为大家详细介绍了Vue如何实现实时监听页面宽度高度变化,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

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播放flv、m3u8视频流(监控)的方法实例

    vue播放flv、m3u8视频流(监控)的方法实例

    随着前端大屏页面的逐渐壮大,客户的...其中实时播放监控的需求逐步增加,视频流格式也是有很多种,用到最多的.flv、.m3u8,下面这篇文章主要给大家介绍了关于vue播放flv、m3u8视频流(监控)的相关资料,需要的朋友可以参考下
    2023-04-04
  • vue2.0 中使用transition实现动画效果使用心得

    vue2.0 中使用transition实现动画效果使用心得

    这篇文章主要介绍了vue2.0 中使用transition实现动画效果使用心得,本文通过案例知识给大家介绍的非常详细,需要的朋友参考下吧
    2018-08-08
  • 详解从react转职到vue开发的项目准备

    详解从react转职到vue开发的项目准备

    这篇文章主要介绍了详解从react转职到vue开发的项目准备,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • vue项目打包之开发环境和部署环境的实现

    vue项目打包之开发环境和部署环境的实现

    这篇文章主要介绍了vue项目打包之开发环境和部署环境的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Vue?非常实用的自定义指令分享

    Vue?非常实用的自定义指令分享

    这篇文章主要介绍了Vue?非常实用的自定义指令分享,Vue自定义指令有全局注册和局部注册两种方式,在?Vue,除了核心功能默认内置的指令?(?v-model?和?v-show?),Vue?也允许注册自定义指令,下文小编给大家分享那些常用到的Vue自定义指令
    2022-02-02
  • 一起写一个即插即用的Vue Loading插件实现

    一起写一个即插即用的Vue Loading插件实现

    这篇文章主要介绍了一起写一个即插即用的Vue Loading插件实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 一定要知道的 25 个 Vue 技巧

    一定要知道的 25 个 Vue 技巧

    这篇文章主要给大家分享将 prop 限制为类型列表、默认内容和扩展点、使用引号观察嵌套值、知道何时使用 v-if、单作用域 slot 的简写、有条件地渲染slot等25 个Vue 技巧,下文是下相关资料,需要的朋友可以参考一下
    2021-11-11
  • vue实现分页组件

    vue实现分页组件

    这篇文章主要为大家详细介绍了vue实现分页组件的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Vue插槽的作用

    Vue插槽的作用

    插槽(slot)是 vue 为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。可以把插槽认为是组件封装期间,为用户预留的内容的占位符
    2022-09-09
  • Vue.js在使用中的一些注意知识点

    Vue.js在使用中的一些注意知识点

    这篇文章主要给大家介绍了Vue.js在使用中的一些注意知识点,文中介绍的非常详细,对大家学习或者使用Vue.js具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-04-04

最新评论

?


http://www.vxiaotou.com