vue自定义监听元素宽高指令

在 main.js 中添加

// 自定义监听元素高度变化指令
const resizerMap = new WeakMap()
const resizeObserver = new ResizeObserver((entries) => {
  for (const entry of entries) {
    const handle = resizerMap.get(entry.target)
    if (handle) {
      handle({
        width: entry.borderBoxSize[0].inlineSize,
        height: entry.borderBoxSize[0].blockSize,
      })
    }
  }
})
Vue.directive('resize', {
  bind(el, binding) {
    resizerMap.set(el, binding.value)
    resizeObserver.observe(el)
  },
})

使用自定义指令

<div v-resize="getHeight">

表格设置高度

<el-table
  v-loading="tableLoading"
  class="mt-2"
  id="elTable"
  ref="elTable"
  :height="tableHeight"
  :data="tableData"
  stripe
  border
  style="width: 100%"
>
data(){
    return{
        tableHeight: 0, // 设置一个初始高度
    }
}

在 methods 中添加方法即可

// 设置表格高度
getHeight() {
  // 右侧总高度
  const mainHeight = document.querySelector('.right-content').offsetHeight
  // 表格距离顶部的高度
  const elTable = document.querySelector('#elTable').getBoundingClientRect()
  // 导航栏高度
  const navH = 60
  // 底部padding
  const bottomP = 30
  // 计算得到高度
  this.tableHeight = mainHeight - (elTable.top - navH) - bottomP
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值