Vue3中自定义指令监听元素尺寸变化

vue对元素的宽高变化看了一下,基本都是用的定时器解决的,刚好看到JS的一个属性方法,可以专门监测元素的尺寸变化
MDN地址https://developer.mozilla.org/zh-CN/docs/Web/API/ResizeObserver

如果想监听元素的其他属性变化,可以使用MutationObserver
MDN地址:https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver
需要注意的是,虽然MutationObserver也可以监听元素宽高变化,但是对animation等通过css改变的宽高变化监听不到

使用之前可以看一下兼容性
ResizeObserver浏览器兼容性

实现代码如下

directives: {
 resize: {
   mounted(el, binding) {
   	 // 这里使用debounce防抖处理,防抖的延时时间可以通过自定义指令的参数传过来,如`v-resize:300`表示300ms延时
   	 // 也可以将此处延时去掉,放在绑定的函数中自定义
     function debounce(fn, delay = 16) {
       let t = null
       return function () {
         if (t) {
           clearTimeout(t)
         }
         const context = this
         const args = arguments
         t = setTimeout(function () {
           fn.apply(context, args)
         }, delay)
       }
     }
     el._resizer = new window.ResizeObserver(debounce(binding.value, Number(binding.arg) || 16))
     el._resizer.observe(el)
   },
   unmounted(el) {
     el._resizer.disconnect()
   },
 },
},

使用如下

<div class="box" v-resize:200="onResize"></div>
const onResize = () => {
 console.log('is resize')
}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值