Skip to content

Tooltip 文字提示

常用于展示鼠标 hover 时的提示信息。

基础用法

在这里我们提供 9 种不同方向的展示方式,可以通过以下完整示例来理解,选择你要的效果。

使用 content 属性来决定 hover 时的提示信息。 由 placement 属性决定展示效果: placement属性值为:[方向]-[对齐位置];四个方向:top、left、right、bottom;三种对齐位置:start, end,默认为空。 如 placement="left-end",则提示信息出现在目标元素的左侧,且提示信息的底部与目标元素的底部对齐。

<script lang="ts" setup>
// import { ref } from 'vue'
</script>
<template>
  <div class="tooltip-base-box">
    <div class="row center">
      <ZgTooltip class="box-item" content="Top Left prompts info" placement="top-start">
        <ZgButton>top-start</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Top Center prompts info" placement="top">
        <ZgButton>top</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Top Right prompts info" placement="top-end">
        <ZgButton>top-end</ZgButton>
      </ZgTooltip>
    </div>
    <div class="row">
      <ZgTooltip class="box-item" effect="dark" content="Left Top prompts info" placement="left-start">
        <ZgButton>left-start</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Right Top prompts info" placement="right-start">
        <ZgButton>right-start</ZgButton>
      </ZgTooltip>
    </div>
    <div class="row">
      <ZgTooltip class="box-item" effect="dark" content="Left Center prompts info" placement="left">
        <ZgButton class="mt-3 mb-3">left</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Right Center prompts info" placement="right">
        <ZgButton>right</ZgButton>
      </ZgTooltip>
    </div>
    <div class="row">
      <ZgTooltip class="box-item" effect="dark" content="Left Bottom prompts info" placement="left-end">
        <ZgButton>left-end</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Right Bottom prompts info" placement="right-end">
        <ZgButton>right-end</ZgButton>
      </ZgTooltip>
    </div>
    <div class="row center">
      <ZgTooltip class="box-item" effect="dark" content="Bottom Left prompts info" placement="bottom-start">
        <ZgButton>bottom-start</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Bottom Center prompts info" placement="bottom">
        <ZgButton>bottom</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Bottom Right prompts info" placement="bottom-end">
        <ZgButton>bottom-end</ZgButton>
      </ZgTooltip>
    </div>
  </div>
</template>

<style>
.tooltip-base-box {
  padding: 20px 0 0 100px;
  width: 600px;
}
.tooltip-base-box .row {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.tooltip-base-box .center {
  justify-content: center;
}
.tooltip-base-box .box-item {
  margin-top: 10px;
  margin-right: 10px;
}
</style>
<script lang="ts" setup>
// import { ref } from 'vue'
</script>
<template>
  <div class="tooltip-base-box">
    <div class="row center">
      <ZgTooltip class="box-item" content="Top Left prompts info" placement="top-start">
        <ZgButton>top-start</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Top Center prompts info" placement="top">
        <ZgButton>top</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Top Right prompts info" placement="top-end">
        <ZgButton>top-end</ZgButton>
      </ZgTooltip>
    </div>
    <div class="row">
      <ZgTooltip class="box-item" effect="dark" content="Left Top prompts info" placement="left-start">
        <ZgButton>left-start</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Right Top prompts info" placement="right-start">
        <ZgButton>right-start</ZgButton>
      </ZgTooltip>
    </div>
    <div class="row">
      <ZgTooltip class="box-item" effect="dark" content="Left Center prompts info" placement="left">
        <ZgButton class="mt-3 mb-3">left</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Right Center prompts info" placement="right">
        <ZgButton>right</ZgButton>
      </ZgTooltip>
    </div>
    <div class="row">
      <ZgTooltip class="box-item" effect="dark" content="Left Bottom prompts info" placement="left-end">
        <ZgButton>left-end</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Right Bottom prompts info" placement="right-end">
        <ZgButton>right-end</ZgButton>
      </ZgTooltip>
    </div>
    <div class="row center">
      <ZgTooltip class="box-item" effect="dark" content="Bottom Left prompts info" placement="bottom-start">
        <ZgButton>bottom-start</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Bottom Center prompts info" placement="bottom">
        <ZgButton>bottom</ZgButton>
      </ZgTooltip>
      <ZgTooltip class="box-item" effect="dark" content="Bottom Right prompts info" placement="bottom-end">
        <ZgButton>bottom-end</ZgButton>
      </ZgTooltip>
    </div>
  </div>
</template>

<style>
.tooltip-base-box {
  padding: 20px 0 0 100px;
  width: 600px;
}
.tooltip-base-box .row {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.tooltip-base-box .center {
  justify-content: center;
}
.tooltip-base-box .box-item {
  margin-top: 10px;
  margin-right: 10px;
}
</style>

更多内容的文字提示

展示多行文本或者是设置文本内容的格式

用具名 slot content,替代tooltip中的content属性。

<script lang="ts" setup>
// import { ref } from 'vue'
</script>
<template>
  <ZgTooltip placement="top">
    <template #content> multiple lines<br />second line </template>
    <ZgButton>Top center</ZgButton>
  </ZgTooltip>
</template>

<style></style>
<script lang="ts" setup>
// import { ref } from 'vue'
</script>
<template>
  <ZgTooltip placement="top">
    <template #content> multiple lines<br />second line </template>
    <ZgButton>Top center</ZgButton>
  </ZgTooltip>
</template>

<style></style>

手动控制模式

manual 打开手动模式;visible控制隐藏显示

<script lang="ts" setup>
import { ref } from 'vue'
const visible = ref(true)
</script>
<template>
  <ZgTooltip placement="top" :visible="visible" manual>
    <template #content> multiple lines<br />second line </template>
    <ZgButton @click="visible = !visible">Top center</ZgButton>
  </ZgTooltip>
</template>

<style></style>
<script lang="ts" setup>
import { ref } from 'vue'
const visible = ref(true)
</script>
<template>
  <ZgTooltip placement="top" :visible="visible" manual>
    <template #content> multiple lines<br />second line </template>
    <ZgButton @click="visible = !visible">Top center</ZgButton>
  </ZgTooltip>
</template>

<style></style>

延时打开关闭

showAfter hideAfter

<script lang="ts" setup>
// import { ref } from 'vue'
</script>
<template>
  <ZgTooltip placement="top" :showAfter="1000" :hideAfter="1000">
    <template #content> multiple lines<br />second line </template>
    <ZgButton>Top center</ZgButton>
  </ZgTooltip>
</template>

<style></style>
<script lang="ts" setup>
// import { ref } from 'vue'
</script>
<template>
  <ZgTooltip placement="top" :showAfter="1000" :hideAfter="1000">
    <template #content> multiple lines<br />second line </template>
    <ZgButton>Top center</ZgButton>
  </ZgTooltip>
</template>

<style></style>

追加到 append-to 的位置

appendTo=".testClass" appendTo="#testId" teleported

class="testClass"
id="testId"
<script lang="ts" setup>
// import { ref } from 'vue'
</script>
<template>
  <div class="testClass">class="testClass"</div>
  <div id="testId">id="testId"</div>
  <ZgTooltip placement="top" appendTo=".testClass" teleported>
    <template #content> multiple lines<br />second line </template>
    <ZgButton>Top center</ZgButton>
  </ZgTooltip>
  <ZgTooltip placement="top-start" appendTo="#testId" teleported>
    <template #content> multiple lines<br />second line </template>
    <ZgButton>top start</ZgButton>
  </ZgTooltip>
</template>

<style>
.testClass,
#testId {
  width: 150px;
  height: 50px;
  margin: 20px;
}
</style>
<script lang="ts" setup>
// import { ref } from 'vue'
</script>
<template>
  <div class="testClass">class="testClass"</div>
  <div id="testId">id="testId"</div>
  <ZgTooltip placement="top" appendTo=".testClass" teleported>
    <template #content> multiple lines<br />second line </template>
    <ZgButton>Top center</ZgButton>
  </ZgTooltip>
  <ZgTooltip placement="top-start" appendTo="#testId" teleported>
    <template #content> multiple lines<br />second line </template>
    <ZgButton>top start</ZgButton>
  </ZgTooltip>
</template>

<style>
.testClass,
#testId {
  width: 150px;
  height: 50px;
  margin: 20px;
}
</style>

Tooltip Attributes

NameDescriptionTypeDefault
content显示的内容,也可被 slot#content 覆盖string''
trigger如何触发 Tooltipenum - 'hover' | 'click' hover
manual启动收到模式booleanfalse
popperOptions是否显示切换密码图标booleanfalse
placeholderpopper.js 参数object 请参考 popper.js 文档{}
transition动画名称string'fade-in-linear'
visibleTooltip 组件可见性boolean
showAfter在触发后多久显示内容,单位毫秒number0
hideAfter延迟关闭,单位毫秒number0
appendTo指示 Tooltip 的内容将附加在哪一个网页元素上string
teleported是否使用 teleport。设置成 true则会被追加到 append-to 的位置booleanfalse
placementTooltip 组件出现的位置enum - 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end'top

Input Events

事件名说明类型
visible-change提示框状态改变(value: boolean) => void
click-outside是否点击容器之外的位置(value: boolean) => void

Input Slots

插槽名Description
defaultTooltip 触发 & 引用的元素
content自定义内容

Exposes

名称说明类型
onOpenonOpen 方法控制 el-tooltip 显示状态() => void
onCloseonClose 方法控制 el-tooltip 显示状态() => void

Released under the MIT License.