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进行处理。

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

相关推荐
Dream-Y.ocean2 小时前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
Csvn3 小时前
性能监控
前端
Highcharts.js3 小时前
Highcharts Gantt使用符号的自定义数据标签开发甘特图示例
javascript·甘特图·highcharts·图表开发·实战代码·响应式图表
Csvn3 小时前
构建工具
前端
FRing034 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Java小卷4 小时前
JuanForm vs FormCreate!Vue3 表单引擎联动配置 PK!
vue.js·低代码
kyriewen6 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒6 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫7 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus7 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude