当前位置: 首页 > article >正文

根据现有html里的元素上面动态创建el-tooltip组件并显示的几种方式

       1、 在这个示例中,我们创建了一个 ref 引用来指向我们想要附加 Tooltip 的 DOM 元素。然后在 onMounted 生命周期钩子中,我们创建了 Tooltip 组件的实例,并将其挂载到一个新创建的 DOM 元素上。我们还在触发元素上添加了 mouseentermouseleave 事件监听器来控制 Tooltip 的显示和隐藏。

<template>
  <div class="tooltip-trigger" ref="triggerEl">Hover me</div>
</template>

<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue';
import { ElTooltip } from 'element-plus';

const triggerEl = ref(null);
let tooltipInstance = null;

onMounted(() => {
  if (triggerEl.value) {
    // 创建 tooltip 组件实例
    tooltipInstance = defineComponent({
      template: `<div><el-tooltip :content="content" placement="top"><span ref="tooltipTrigger"></span></el-tooltip></div>`,
      components: { ElTooltip },
      data() {
        return {
          content: 'This is a tooltip'
        };
      },
      mounted() {
        // 将 tooltip 的触发元素设置为动态创建的 span
        this.$refs.tooltipTrigger.appendChild(triggerEl.value);
      }
    });

    // 挂载到触发元素上
    const mountNode = document.createElement('div');
    triggerEl.value.appendChild(mountNode);
    tooltipInstance = createApp(tooltipInstance).mount(mountNode);

    // 监听鼠标事件来控制显示和隐藏
    triggerEl.value.addEventListener('mouseenter', () => {
      tooltipInstance.component.proxy.$refs.tooltip.content = 'Updated content';
    });
    triggerEl.value.addEventListener('mouseleave', () => {
      // 隐藏 tooltip
      tooltipInstance.component.proxy.$refs.tooltip.doDestroy();
    });
  }
});

onBeforeUnmount(() => {
  if (tooltipInstance) {
    // 销毁 tooltip 实例
    tooltipInstance.unmount();
  }
});
</script>

<style>
.tooltip-trigger {
  cursor: pointer;
}
</style>

2、下面通过找到一个 容器来进行动态创建虚拟节点的方式

 // 假设属性值存储在变量中
      nextTick(() => {
        const attributeValue = element.id;
        // 构建CSS选择器字符串
        const selector = `[data-element-id="${attributeValue}"]`;
        const container = document.querySelector(selector);
        console.log("container=",container)
        // 创建一个不可见的触发元素
          const trigger = document.createElement('div');
          trigger.style.display = 'none';
          container.appendChild(trigger);
        // 创建一个el-tooltip的虚拟节点
          const tooltipVNode = createVNode(ElTooltip, {
            content: nodeHtml.value,
            placement: 'top',
            offset: 100, // 可以根据需要调整偏移量
            //reference: trigger, // 使用触发元素的引用
            visible: true, // 设置为可见
          });

        
        // 使用render函数将虚拟节点渲染到容器元素上
        render(tooltipVNode, container);     
      })


http://www.kler.cn/news/326384.html

相关文章:

  • js中数组操作filter()、some()、every()等函数
  • 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)
  • 360° 镜头检测铝件内壁划痕与杂质:保障铝件内孔制造质量的精准方案
  • Flutter中使用FFI的方式链接C/C++的so库(harmonyos)
  • winform 将untiy程序嵌入到一个panel里
  • oracle 如何获取当前时间的日份,月份,年份
  • 目前最好用的爬虫软件是那个?
  • YOLOv10涨点改进:IoU优化 | Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU
  • 快速学会一个算法,BERT
  • ant-design-vue中table组件复选框分页切换保留之前选中数据
  • 网络工程和信息安全专业应该考哪些证书?
  • Python每次for循环向list中添加多个元素
  • 【echarts】报错series.render is required.
  • 【ZYNQ 开发】填坑!双核数据采集系统LWIP TCP发送,运行一段时间不再发送且无法ping通的问题解决
  • You are not allowed to push code to this project
  • Docker 安装 ClickHouse 教程
  • Composition API 与 React Hook 的区别
  • Java LeetCode每日一题(2024.9.26)
  • Unity开发绘画板——04.笔刷大小调节
  • 智能AI对话绘画二合一网站源码系统 带完整的安装代码包以及搭建部署教程
  • XPath入门
  • 65.【C语言】联合体
  • Python | Leetcode Python题解之第442题数组中重复的数据
  • plt注解相关介绍及应用
  • 封装提示词翻译组件
  • K8S:开源容器编排平台,助力高效稳定的容器化应用管理
  • 开放词汇目标检测
  • Unity实战案例全解析:RTS游戏的框选和阵型功能(4)阵型功能
  • 【单元测试】任务1:白盒测试1
  • 完成UI界面的绘制