首页 > 其他分享 >vue3,封装检测元素大小变化的自定义指令

vue3,封装检测元素大小变化的自定义指令

时间:2024-02-01 14:22:57浏览次数:34  
标签:el const 自定义 dom app directives vue3 封装 any

 1 // resizeObserver.ts
 2 // 监听元素大小变化的指令
 3 const map = new WeakMap()
 4 const ob = new ResizeObserver((entries) => {
 5   for (const entry of entries) {
 6     // 获取dom元素的回调
 7     const handler = map.get(entry.target)
 8     //存在回调函数
 9     if (handler) {
10       // 将监听的值给回调函数
11       handler({
12         width: entry.borderBoxSize[0].inlineSize,
13         height: entry.borderBoxSize[0].blockSize
14       })
15     }
16   }
17 })
18 
19 export const Resize = {
20   mounted(el: any, binding: any) {
21     //将dom与回调的关系塞入map
22     map.set(el, binding.value)
23     //监听el元素的变化
24     ob.observe(el)
25   },
26   unmounted(el: any) {
27     //取消监听
28     ob.unobserve(el)
29   }
30 }
31 
32 export default Resize
// index.ts
import { Resize } from './resizeObserver'

// 自定义指令集合
const directives: any = {
  Resize
}

export default {
  install(app: any) {
    Object.keys(directives).forEach((key) => {
      app.directive(key, directives[key])
    })
  }
}
// 在mian.ts中注册指令
import { createApp } from 'vue' import directives from '@/utils/directive/index' const app = createApp(App) app.use(ElementPlus, { locale: en }) app.use(directives)

使用

<template>
    <div
        id="mapContainer"
        v-resize="onResize"
        class="map-container"
      >
    </div>
</template>

<script setup lang="ts">
    const onResize = (dom: any) => {
      // console.log(dom) // dom为元素变化后的宽高
    }
</script>

 

标签:el,const,自定义,dom,app,directives,vue3,封装,any
From: https://www.cnblogs.com/Hhuizi/p/18001136

相关文章

  • vue3+elementplus+vuedraggable插件,实现左右拖拽移入,和上下拖拽排序
    先看目标效果(gif由迅捷gif工具制作,使用vscode可以打开gif,进行预览)效果分析1.左右区域,支持拖拽。左侧选项,拖入右边。可以新建大模块,也可以给模块新增一项。2.模块内部,支持拖拽排序,并按照排序,生成一个简单的层级。3.模块名字支持编辑。同时增加表单校验,名字不存在,则无法保存。......
  • 3秒钟教你如何配置vscode中的vue3代码快速生成模版
    1.首先点击你的vscode左下角的齿轮设置按钮,然后点击配置用户代码片段2.输入vue搜索vue.json这个文件,然后点击这个文件3.接下来只需在原有的注释之下输入粘贴如下代码即可4.代码如下"vue3":{"prefix":"vue3","body":["<template>",......
  • 博客园自定义主题
    开源项目非常感谢作者的工作,下面是github主页和官方文档https://github.com/BNDong/Cnblogs-Theme-SimpleMemoryhttps://bndong.github.io/Cnblogs-Theme-SimpleMemory/v2.1/dist/三方教程https://www.cnblogs.com/chenkeer/p/15193179.html常见错误说明修改后,博客页面一......
  • Day63 异常03:自定义异常及经验小结
    自定义异常使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。在程序中使用自定义异常类,大体可分为以下几个步骤:创建自定义异常类。在方法中通过throw关键字抛出异常对象。如果在当......
  • vue3-setup中如何通过ref调用子组件的函数
    vue3-setup中如何通过ref调用子组件的函数子组件通过defineExpose向外导出需要调用的函数在父子间中定义ref引用来调用子组件关键代码:<scriptsetup>import{ref,reactive,defineExpose}from'vue'constshow=ref(false);consttitle=ref('添加收款方式');con......
  • Java调用ChatGPT(基于SpringBoot和Vue)实现连续对话、流式输出和自定义baseUrl
     源码及更详细的介绍说明参见Git上的README.md文档https://github.com/asleepyfish/chatgpt本文Demo(SpringBoot和Main方法Demo均包括)的Git地址:https://github.com/asleepyfish/chatgpt-demo流式输出结合Vue前端的Demo的Git地址:https://github.com/asleepyfish/chatg......
  • easyui-datagrid 加载数据 方法二 ( 自定义返回值 json方式)
    效果图 html部分<tableclass="my_table"><tr><tdclass='my_dt_label'>主叫号码:</td><tdclass='my_dt_field'><inputtype='text'id='select_callerid&......
  • vue3使用v-viewer图片预览工具
    vue3使用v-viewer图片预览v-viewer中文文档安装全局注册main.js文件中使用 v-viewer中文文档安装pnpminstallv-viewerviewerjs 全局注册main.js文件中importViewerfrom'v-viewer'import'viewerjs/dist/viewer.css'constapp=createApp(App)//......
  • wpf 数据绑定 INotifyPropertyChanged封装
    BindableBase.cspublicabstractclassBindableBase:INotifyPropertyChanged{publiceventPropertyChangedEventHandlerPropertyChanged;//调用方法:publicstringName{get=>name;set{SetProperty<string>(refname,value);}}......
  • D20XB100-ASEMI整流桥D20XB100参数、封装、规格
    编辑:llD20XB100-ASEMI整流桥D20XB100参数、封装、规格型号:D20XB100品牌:ASEMI正向电流(Id):20A反向耐压(VRRM):1000V正向浪涌电流:300A正向电压(VF):1.05V引脚数量:5芯片个数:4芯片尺寸:MIL功率(Pd):大功率设备封装:GBJ-5工作温度:-40°C~150°C类型:插件、整流桥D20XB100描述:ASEMI品牌D20XB100是采......