Skip to content

Tooltip 文字提示

常用于展示鼠标 hover 或点击时的提示信息,支持多种弹出位置和触发方式。

基础用法

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

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

<script setup>
import { ref } from 'vue'
import Tooltip from '@/components/Tooltip/Tooltip.vue'
import Button from '@/components/Button/Button.vue'
</script>
<template>
  <div class="tooltip-demo">
    <Tooltip content="这是一个提示文本">
      <Button>悬停查看提示</Button>
    </Tooltip>
  </div>
</template>

<style scoped>
.tooltip-demo {
  display: flex;
  justify-content: center;
  padding: 40px 0;
}
</style>

不同位置

Tooltip 组件提供了多种不同的位置,通过设置 placement 属性来配置。

<script setup>
import { ref } from 'vue'
import Tooltip from '@/components/Tooltip/Tooltip.vue'
import Button from '@/components/Button/Button.vue'
</script>
<template>
  <div class="tooltip-demo">
    <div class="tooltip-row">
      <Tooltip content="Top Left 提示" placement="top-start">
        <Button>上左</Button>
      </Tooltip>
      <Tooltip content="Top 提示" placement="top">
        <Button>上边</Button>
      </Tooltip>
      <Tooltip content="Top Right 提示" placement="top-end">
        <Button>上右</Button>
      </Tooltip>
    </div>
    <div class="tooltip-row">
      <Tooltip content="Left 提示" placement="left">
        <Button>左边</Button>
      </Tooltip>
      <div style="width: 80px;"></div>
      <Tooltip content="Right 提示" placement="right">
        <Button>右边</Button>
      </Tooltip>
    </div>
    <div class="tooltip-row">
      <Tooltip content="Bottom Left 提示" placement="bottom-start">
        <Button>下左</Button>
      </Tooltip>
      <Tooltip content="Bottom 提示" placement="bottom">
        <Button>下边</Button>
      </Tooltip>
      <Tooltip content="Bottom Right 提示" placement="bottom-end">
        <Button>下右</Button>
      </Tooltip>
    </div>
  </div>
</template>

<style scoped>
.tooltip-demo {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 20px;
  padding: 40px 0;
}
.tooltip-row {
  display: flex;
  gap: 20px;
}
</style>

触发方式

Tooltip 组件提供了两种触发方式:hoverclick

<script setup>
import { ref } from 'vue'
import Tooltip from '@/components/Tooltip/Tooltip.vue'
import Button from '@/components/Button/Button.vue'
</script>
<template>
  <div class="tooltip-demo">
    <Tooltip content="悬停触发的提示" trigger="hover">
      <Button>悬停触发(默认)</Button>
    </Tooltip>
    
    <Tooltip content="点击触发的提示" trigger="click">
      <Button>点击触发</Button>
    </Tooltip>
  </div>
</template>

<style scoped>
.tooltip-demo {
  display: flex;
  justify-content: center;
  gap: 30px;
  padding: 40px 0;
}
</style>

手动控制

通过设置 manual 属性可以手动控制 Tooltip 的显示与隐藏。

<script setup>
import { ref } from 'vue'
import Tooltip from '@/components/Tooltip/Tooltip.vue'
import Button from '@/components/Button/Button.vue'

const tooltipRef = ref(null)

const showTooltip = () => {
  tooltipRef.value.show()
}

const hideTooltip = () => {
  tooltipRef.value.hide()
}
</script>
<template>
  <div class="tooltip-demo">
    <Tooltip
      content="这是一个手动控制的提示"
      manual
      ref="tooltipRef"
      placement="top"
    >
      <Button>手动控制的目标元素</Button>
    </Tooltip>

    <div class="control-buttons">
      <Button type="primary" @click="showTooltip">显示提示</Button>
      <Button @click="hideTooltip">隐藏提示</Button>
    </div>
  </div>
</template>

<style scoped>
.tooltip-demo {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 20px;
  padding: 40px 0;
}
.control-buttons {
  display: flex;
  gap: 10px;
}
</style>

自定义内容

可以通过插槽 content 自定义提示内容。

<script setup>
import { ref } from 'vue'
import Tooltip from '@/components/Tooltip/Tooltip.vue'
import Button from '@/components/Button/Button.vue'
import Icon from '@/components/Icon/Icon.vue'
</script>
<template>
  <div class="tooltip-demo">
    <Tooltip>
      <Button>自定义内容</Button>
      <template #content>
        <div class="custom-tooltip-content">
          <h4><Icon icon="info-circle" /> 自定义提示内容</h4>
          <p>这里可以放置更加丰富的内容,包括:</p>
          <ul>
            <li>文本</li>
            <li>图标</li>
            <li>其他组件</li>
          </ul>
        </div>
      </template>
    </Tooltip>
  </div>
</template>

<style scoped>
.tooltip-demo {
  display: flex;
  justify-content: center;
  padding: 40px 0;
}
.custom-tooltip-content {
  padding: 5px;
}
.custom-tooltip-content h4 {
  margin-top: 0;
  margin-bottom: 10px;
  color: #409eff;
}
.custom-tooltip-content p {
  margin: 5px 0;
}
.custom-tooltip-content ul {
  margin: 5px 0;
  padding-left: 20px;
}
</style>

Attributes

参数说明类型默认值
content显示的内容String
placementTooltip 的出现位置Stringbottom
trigger触发方式Stringhover
manual是否手动控制模式Booleanfalse
popperOptionspopper.js 的参数Object
transition动画名称Stringfade
openDelay延迟出现,单位毫秒Number0
closeDelay延迟关闭,单位毫秒Number0

Events

事件名说明回调参数
visible-change显示状态变更时触发新的显示状态 (Boolean)
click-outside点击外部时触发

Slots

插槽名说明
Tooltip 触发的元素
content自定义内容

Methods

方法名说明参数
show显示 Tooltip
hide隐藏 Tooltip