vue监听dom元素的宽高变化和自定义指令监听dom元素的宽高变化

在Vue中,你可以使用ResizeObserver来监听DOM元素的宽高变化。以下是一个示例代码:

html 复制代码
<template>
  <div ref="myElement" @resize="handleResize">
    <!-- DOM元素内容 -->
  </div>
</template>

<script>
export default {
  mounted() {
    const resizeObserver = new ResizeObserver((entries) => {
      // 当DOM元素的宽高发生变化时执行回调函数
      this.handleResize(entries[0].contentRect);
    });
    resizeObserver.observe(this.$refs.myElement);

    // 组件销毁时停止观察
    this.$once("hook:beforeDestroy", () => {
      resizeObserver.disconnect();
    });
  },
  methods: {
    handleResize(rect) {
      // 在这里处理DOM元素宽高变化后的逻辑
      console.log(`宽度:${rect.width}px,高度:${rect.height}px`);
    },
  },
};
</script>

以上示例演示了如何在Vue组件中通过ResizeObserver来监听DOM元素的宽高变化。在mounted钩子中创建ResizeObserver实例,并通过$refs访问DOM元素进行观察。当宽高变化时,会调用handleResize方法进行处理。

另外,你也可以创建一个自定义指令来监听DOM元素的宽高变化。以下是一个自定义指令的示例代码:

html 复制代码
<template>
  <div v-resize="handleResize">
    <!-- DOM元素内容 -->
  </div>
</template>

<script>
export default {
  directives: {
    resize: {
      inserted(el, binding) {
        const resizeObserver = new ResizeObserver((entries) => {
          // 当DOM元素的宽高发生变化时执行回调函数
          binding.value(entries[0].contentRect);
        });
        resizeObserver.observe(el);

        // 组件销毁时停止观察
        el._resizeObserver_ = resizeObserver;
      },
      unbind(el) {
        if (el._resizeObserver_) {
          el._resizeObserver_.disconnect();
          delete el._resizeObserver_;
        }
      },
    },
  },
  methods: {
    handleResize(rect) {
      // 在这里处理DOM元素宽高变化后的逻辑
      console.log(`宽度:${rect.width}px,高度:${rect.height}px`);
    },
  },
};
</script>

以上示例演示了如何创建一个自定义指令v-resize,它通过ResizeObserver来监听绑定指令的DOM元素的宽高变化。当宽高变化时,会调用指令绑定值所指定的方法handleResize进行处理。

希望以上代码示例对你有所帮助!

相关推荐
excel33 分钟前
Three.js 材质(Material)详解 —— 区别、原理、场景与示例
前端
掘金安东尼1 小时前
抛弃自定义模态框:原生Dialog的实力
前端·javascript·github
hj5914_前端新手5 小时前
javascript基础- 函数中 this 指向、call、apply、bind
前端·javascript
薛定谔的算法5 小时前
低代码编辑器项目设计与实现:以JSON为核心的数据驱动架构
前端·react.js·前端框架
Hilaku5 小时前
都2025年了,我们还有必要为了兼容性,去写那么多polyfill吗?
前端·javascript·css
yangcode5 小时前
iOS 苹果内购 Storekit 2
前端
LuckySusu5 小时前
【js篇】JavaScript 原型修改 vs 重写:深入理解 constructor的指向问题
前端·javascript
LuckySusu5 小时前
【js篇】如何准确获取对象自身的属性?hasOwnProperty深度解析
前端·javascript
LuckySusu5 小时前
【js篇】深入理解 JavaScript 作用域与作用域链
前端·javascript
LuckySusu5 小时前
【js篇】call() 与 apply()深度对比
前端·javascript