VUE实现元素高度根据屏幕高度动态改变/overflow踩坑


VUE实现元素高度根据屏幕高度动态改变/overflow踩坑

overflow踩坑

通常我们会在需要实现滚动条的时候添加overflow这个属性。必须要给赋予overflow的元素一个固定的height或者width才能实现对应方向上的滚动条。

vue实现元素高度根据屏幕高度动态改变

先感谢这篇博客:https://www.cnblogs.com/wuqilang/p/13434823.html

首先在data中给定一个body的高度:

  data() {
    return {
      clientHeight: document.body.clientHeight
    }
  }

然后在mounted中在每次载入页面的时候都先给定一个初始值:

  mounted() {
    const that = this
    window.onresize = () => {
      return (() => {
        window.screenHeight = document.body.clientHeight
        that.clientHeight = window.screenHeight
      })()
    }
  },

接着使用watch函数监听clientHeight的变化:

  watch: {
    clientHeight(val) {
      // 为了避免频繁触发resize函数导致页面卡顿,使用定时器
      if (!this.timer) {
        // 一旦监听到的screenWidth值改变,就将其重新赋给data里的screenWidth
        this.clientHeight = val
        this.timer = true
        let that = this
        setTimeout(function() {
          // 打印screenWidth变化的值
          console.log(that.clientHeight)
          that.timer = false
        }, 400)
      }
    }
  }

最后在需要动态获取高度(宽度)的元素上动态获取屏幕的可视高度:

  :style="{ height: clientHeight-194 + 'px' }"

总结就是使用 :style 动态改变元素的样式 然后使用watch函数监听元素样式的值的变化


文章作者: Silong Xu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Silong Xu !
 上一篇
vue中一级路由跳转另一一级路由 vue中一级路由跳转另一一级路由
vue中一级路由跳转另一一级路由 任务阐述 直接使用this.$router.replace或者 this.$router.push方法进行路由跳转的话会出现url改变了但是页面内容没有进行相应的渲染。 简单来看就是一个使用this.$ro
2020-11-28
下一篇 
Nodejs传递数据库数据给前端实现前后端分离开发 Nodejs传递数据库数据给前端实现前后端分离开发
Nodejs传递数据库数据给前端实现前后端分离开发 MySQL+Sequelize 什么是MySQL&Sequelize MySQL是数据库,Sequelize是数据库的一个使用工具。 Sequelize可以连接很多数据库,sqli
2020-11-28
  目录