vue3 封装一个Tooltip 文字提示组件

效果图

 默认展示icon图标,悬浮展示文字

如果slot有内容则展示对应内容 

  

实现

用的是El-Tooltip组件

Element - The world's most popular Vue UI framework

组件代码

<script setup lang="ts">
import { Icon } from '@/components/Icon'
import { ElTooltip } from 'element-plus'
import { PropType } from 'vue'

type Position =
  | 'top'
  | 'top-start'
  | 'top-end'
  | 'bottom'
  | 'bottom-start'
  | 'bottom-end'
  | 'left'
  | 'left-start'
  | 'left-end'
  | 'right'
  | 'right-start'
  | 'right-end'

defineProps({
  title: {
    type: String,
    default: () => ''
  },
  // 针对kb表格提示
  isKbTable: {
    type: Boolean,
    default: false
  },
  mtop: {
    type: [Number, String],
    default: () => 0
  },
  ml: {
    type: [Number, String],
    default: () => 10
  },
  location: {
    type: String as () => Position,
    default: () => 'top'
  },
  disabled: {
    type: Boolean,
    default: () => false
  },
  visible: {
    type: Boolean as PropType<Nullable<boolean>>,
    default: () => null
  },
  effect: {
    type: String as PropType<'dark' | 'light' | 'customized'>,
    default: () => 'customized'
  }
})
</script>
<template>
  <ElTooltip
    class="box-item"
    :effect="effect"
    :content="title"
    :placement="location"
    :disabled="disabled"
    :visible="visible"
    raw-content
    :popper-class="`vn-tooltip ${isKbTable ? 'vn-tooltip--kbTable' : ''} ${
      effect === 'light' ? 'vn-tooltip--light' : ''
    }`"
  >
    <div
      :class="{ 'inline-block': !$slots.default }"
      :style="{ marginTop: `${mtop}px`, marginLeft: `${!$slots.default ? ml : 0}px` }"
    >
      <Icon class="tooltip-icon" v-if="!$slots.default" icon="svg-icon:v2-query" :size="20" />
      <slot></slot>
    </div>
  </ElTooltip>
</template>

<style lang="less">
.vn-tooltip--default-box {
  display: flex;
  align-items: center;
  justify-content: center;
}

.inline-block {
  display: inline-block;
}

.tooltip-icon {
  pointer-events: none !important;
  cursor: pointer;
}

/* 自定义背景样式 */
.el-popper.is-customized {
  padding: 6px 12px;
  background: #2f3b53;
}

.el-popper.is-customized .el-popper__arrow::before {
  right: 0;
  background: #2f3b53;
  border-radius: 3px 0;
}

.vn-tooltip {
  z-index: 9999999 !important;
  max-width: 300px !important;
  font-family: Arial-Regular, Arial, serif;
  font-size: 12px !important;
  font-weight: 400;
  line-height: 16px;
  color: white !important;
  border-radius: 8px !important;
}

.vn-tooltip--kbTable {
  bottom: -25px !important;
}

.vn-tooltip--light {
  color: #000000 !important;
}
</style>

使用方法

//展示默认的提示图标
<Tooltip :title="t('agentConsole.preferences.globalAskDesc')" />
//带有内容
<Tooltip :title="t(item.title)" location="right" effect="light">
  <div>
    //内容
  </div>
</Tooltip>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/303592.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python统计分析——直方图(sns.histplot)

使用seanborn.histplot()函数绘制直方图 from matplotlib.pyplot as plt import seaborn as snsdata_setnp.array([2,3,3,4,4,4,4,5,5,6]) plt.hist(fish_data) &#xff08;1&#xff09;dataNone, 表示数据源。 &#xff08;2&#xff09;xNone, 表示直方图的分布垂直与x轴…

Java开发+Intellij-idea+Maven+工程构建

Java开发Intellij-ideaMaven工程构建 Intellij-idea是一款流行的Java集成开发环境&#xff0c;它支持Maven作为项目管理和构建工具。Maven可以帮助开发者自动下载项目依赖的jar包&#xff0c;执行编译、测试、打包等生命周期任务。本资源将介绍如何在Intellij-idea中创建、导入…

web提示框属性的运用

效果展示&#xff1a; 注意事项&#xff1a; 引用JQuery文件地址和图片地址要更换一下。提示框属性的宽应该和图片的宽保持一致。 html/css/javascript页面代码&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <tit…

【Python学习】Python学习8-Number

目录 【Python学习】Python学习8-Number 前言在变量赋值时被创建Python支持四种不同的数据类型整型(Int)长整型(long integers&#xff09;浮点型(loating point real values)复数(complex numbers) Python Number 类型转换Python math 模块、cmath 模块Python数学函数Python随…

【现代密码学】笔记2 -- 完善保密性《introduction to modern cryphtography》现代密码学原理与协议

【现代密码学】笔记2--完善保密性《introduction to modern cryphtography》 写在最前面2 完善保密性的介绍2.1 定义和基本属性加密方案的组成密钥产生算法 (Gen)加密算法 (Enc)解密算法 (Dec)概率分布独立性 完美保密加密3. 回顾加密词法4. 完美保密&#xff08;**Perfect Sec…

芯课堂 | 如何配置SWM系列系统时钟?

如何配置SWM系列 系统时钟&#xff1f; 华芯微特科技有限公司SWM系列芯片可通过软件配置改变时钟的速度&#xff0c;可以让我们的设计更加灵活,频率可选空间也更加广泛&#xff0c;用户可以根据自己的实际需求配置需要的系统时钟。为了让用户能够更简单的使用这一功能&#xf…

进阶分布式链路追踪

另外我的新书RocketMQ消息中间件实战派上下册&#xff0c;在京东已经上架啦&#xff0c;目前都是5折&#xff0c;非常的实惠。 https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html “RocketMQ消息中间件实战派上下册”是我既“Spring Cloud Alibaba微…

Linux:进程的通信

目录 进程间的通信 管道 1.概念 2.匿名管道 3.命名管道 4.匿名管道与命名管道的区别 5.总结管道的特点 共享内存 1.原理 2.共享内存的建立 3.代码 1.相关函数 2.总结 进程间的通信 1.进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程…

服务器宕机怎么办?怎么预防宕机?

相信不少用户会听到或者在文章中提到电脑宕机或者服务器宕机&#xff0c;不少用户对宕机的意思不太理解。那么服务器宕机是什么意思&#xff1f; 宕机属于计算机的术语&#xff0c;指电脑或者服务器不能正常工作。口语中我们简单的把停掉机器叫做down机&#xff0c;转换为汉字是…

高通平台开发系列讲解(USB篇)adb function代码分析

文章目录 一、FFS相关动态打印二、代码入口三、ffs_alloc_inst四、ep0、ep1&ep2的注册五、读写过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB adb function代码f_fs.c。 一、FFS相关动态打印 目录:msm-4.14/drivers/usb/gadget/fun…

Ubuntu下Lighttpd服务器安装,并支持PHP

1、说明 Lighttpd 是一个德国人领导的开源Web服务器软件&#xff0c;其根本的目的是提供一个专门针对高性能网站&#xff0c;安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销、cpu占用率低、效能好以及丰富的模块等特点。 Lighttpd是众多OpenSource轻量级…

DSP2335的时钟PLL配置

PLL模块框图 xclkin是直接进来的外部时钟&#xff1b; 而下面的是振荡器&#xff08;晶振出来&#xff09;的时钟 PLLSTS 锁相环状态寄存器 PLLCR 锁相环控制寄存器 PLLSTS【oscoff】 决定着外部时钟的输入 PLLSTS【plloff】 锁相器关闭位 0使能PLL 锁相环控制寄存器…

day6:进程间的通信

思维导图&#xff1a; 实现多个进程之间的收发信息操作 create.c&#xff1a; #include <head.h> int main(int argc, const char *argv[]) {if(mkfifo("a_send_b",0664)!0){perror("");return -1;}if(mkfifo("b_send_a",0664)!0){perro…

vue3 封装一个按钮组件(可自定义按钮样式)

效果图 鼠标悬浮有对应的文字提示&#xff0c;且图标出现背景色和颜色 实现 目前提供五个固定样式的图标及三个用户自定义的图标&#xff0c;可根据需要补充 组件代码 <script setup lang"ts"> import { onMounted, PropType, reactive, ref, watch } from v…

jupyter内核错误

1、在dos窗口输入以下命令激活环境&#xff1a;anaconda activate 【py环境名&#xff0c;比如py37】&#xff08;目的是新家你一个虚拟环境&#xff09; 2、在虚拟环境py37下安装jupyter notebook&#xff0c;命令&#xff1a;pip install jupyter notebook 3、安装ipykerne…

python24.1.8

嵌套/多条件判断 嵌套 多条件&#xff1a; 实践&#xff1a;

pybind11实现numpy和OpenCV Mat的数据交互

1、编译安装pybind11 下载源代码&#xff1a;https://github.com/pybind/pybind11&#xff0c; 文档&#xff1a;https://pybind11.readthedocs.io/en/stable/compiling.html 解压后进入到命令行&#xff0c;如果有conda环境&#xff0c;就先进入想要的conda环境&#xff0c…

【python入门】day22:机票订购界面、北京地铁1号线运行图

机票订购界面 print(✈国内\t✪国际&#xff0c;港澳台\t↘发现低价) print(----------------------------------) print(航班类型&#xff1a;⊙单程 ⊙往返 ⊙多程&#xff08;含缺口程&#xff09;) print(出发城市&#xff1a;北京) print(到达城市&#xff1a;长春) pri…

OpenHarmony - 基于ArkUI框架实现日历应用

前言 对于刚刚接触OpenHarmony应用开发的开发者&#xff0c;最快的入门方式就是开发一个简单的应用&#xff0c;下面记录了一个日历应用的开发过程&#xff0c;通过日历应用的开发&#xff0c;来熟悉基本图形的绘制&#xff0c;ArkUI的组件的使用&#xff0c;UI组件生命周期&a…

Java集合框架概念详解

目录 1. 什么是Java集合框架&#xff1f;2. 常用接口介绍3. 常用实现类介绍4. 集合框架的应用场景 前言&#xff1a; Java集合框架是Java编程中最重要的工具之一。它提供了一套强大而灵活的数据结构和算法&#xff0c;用于存储和操作数据。本文将详细介绍Java集合框架的概念、常…
最新文章