当前位置: 代码网 > it编程>编程语言>Javascript > Vue实现实时监听页面宽度高度变化

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

2024年05月18日 Javascript 我要评论
vue监听页面宽高运用的主要技术:watch监听话不多说直接上代码,自行研究 <template> <div class="rightcontainer"> <h

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实时监听页面宽高内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com