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

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

相关推荐
FungLeo36 分钟前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
Csvn2 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_2 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt2 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
JavaGuide3 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel3 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘5 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马5 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut5 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm
hiahiahia1235 小时前
实现完整 Tool Dispatcher
开发语言·前端