Skip to content

Tooltip 文字提示

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

基础用法

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

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

<script lang="ts" setup>
import SiTooltip from '@/components/Tooltip/Tooltip.vue'
import SiButton from '@/components/Button/Button.vue'
</script>

<template>
  <div>
    <div class="tooltip-base-box">
      <div class="row center">
        <SiTooltip
          class="box-item"
          content="Top Left prompts info"
          placement="top-start"
        >
          <SiButton>top-start</SiButton>
        </SiTooltip>
        <SiTooltip
          class="box-item"
          content="Top Center prompts info"
          placement="top"
        >
          <SiButton>top</SiButton>
        </SiTooltip>
        <SiTooltip
          class="box-item"
          content="Top Right prompts info"
          placement="top-end"
        >
          <SiButton>top-end</SiButton>
        </SiTooltip>
      </div>
      <div class="row">
        <SiTooltip
          class="box-item"
          content="Left Top prompts info"
          placement="left-start"
        >
          <SiButton>left-start</SiButton>
        </SiTooltip>
        <SiTooltip
          class="box-item"
          content="Right Top prompts info"
          placement="right-start"
        >
          <SiButton>right-start</SiButton>
        </SiTooltip>
      </div>
      <div class="row">
        <SiTooltip
          class="box-item"
          content="Left Center prompts info"
          placement="left"
        >
          <SiButton class="mt-3 mb-3">
            left
          </SiButton>
        </SiTooltip>
        <SiTooltip
          class="box-item"
          content="Right Center prompts info"
          placement="right"
        >
          <SiButton>right</SiButton>
        </SiTooltip>
      </div>
      <div class="row">
        <SiTooltip
          class="box-item"
          content="Left Bottom prompts info"
          placement="left-end"
        >
          <SiButton>left-end</SiButton>
        </SiTooltip>
        <SiTooltip
          class="box-item"
          content="Right Bottom prompts info"
          placement="right-end"
        >
          <SiButton>right-end</SiButton>
        </SiTooltip>
      </div>
      <div class="row center">
        <SiTooltip
          class="box-item"
          content="Bottom Left prompts info"
          placement="bottom-start"
        >
          <SiButton>bottom-start</SiButton>
        </SiTooltip>
        <SiTooltip
          class="box-item"
          content="Bottom Center prompts info"
          placement="bottom"
        >
          <SiButton>bottom</SiButton>
        </SiTooltip>
        <SiTooltip
          class="box-item"
          content="Bottom Right prompts info"
          placement="bottom-end"
        >
          <SiButton>bottom-end</SiButton>
        </SiTooltip>
      </div>
    </div>
  </div>
</template>

<style scoped>
.tooltip-base-box {
  width: 600px;
}
.row {
  display: flex;
  justify-content: space-between;
}
.center {
  display: flex;
  justify-content: center;
  flex-direction: row;
}
.box-item {
  margin: 10px 10px;
}
</style>

更多内容的文字提示

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

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

<script lang="ts" setup>
import SiTooltip from '@/components/Tooltip/Tooltip.vue'
import SiButton from '@/components/Button/Button.vue'
</script>

<template>
  <div>
    <div class="tooltip-base-box">
      <SiTooltip
        class="box-item"
        placement="top"
      >
        <template #content>
          multiple lines<br>second line
        </template>
        <SiButton>top</SiButton>
      </SiTooltip>
    </div>
  </div>
</template>

支持点击触发

<script lang="ts" setup>
import SiTooltip from '@/components/Tooltip/Tooltip.vue'
import SiButton from '@/components/Button/Button.vue'
</script>

<template>
  <div>
    <div class="tooltip-base-box">
      <SiTooltip
        class="box-item"
        placement="top"
        trigger="click"
      >
        <template #content>
          multiple lines<br>second line
        </template>
        <SiButton>click me</SiButton>
      </SiTooltip>
    </div>
  </div>
</template>

支持手动触发

<script lang="ts" setup>
import { ref } from 'vue'
import SiTooltip from '@/components/Tooltip/Tooltip.vue'
import SiButton from '@/components/Button/Button.vue'
import type { TooltipInstance } from '@/components/Tooltip/type.ts'

const tooltipRef = ref<TooltipInstance | null>(null)

function open() {
  tooltipRef.value?.show()
}
function close() {
  tooltipRef.value?.hide()
}
</script>

<template>
  <div>
    <div class="tooltip-base-box">
      <SiTooltip
        ref="tooltipRef"
        class="box-item"
        placement="top"
        manual
      >
        <template #content>
          multiple lines<br>second line
        </template>
        <SiButton>top</SiButton>
      </SiTooltip>
    </div>
    <div>
      <SiButton @click="open">
        open
      </SiButton>
      <SiButton @click="close">
        close
      </SiButton>
    </div>
  </div>
</template>

<style>
  .box-item {
  margin-bottom: 20px;
}
</style>

API

Attributes

| 名称 | 说明 | 类型 | 默认值 | | :------------- | :----------------------------------------------- | :--------------------------------------------------------------- | :------ | ----- | | content | 显示的内容,也可被 slot#content 覆盖 | string | '' | | placement | Tooltip 组件出现的位置 | enum | bottom | | disabled | Tooltip 组件是否禁用 | boolean | false | | popper-options | popper.js 参数 | object 请参考 popper.js 文档 | {} | | open-delay | 在触发后多久显示内容,单位毫秒 | number | 200 | | close-delay | 延迟关闭,单位毫秒 | number | 200 | | trigger | 如何触发 Tooltip | hover | click | hover | | manual | 是否手动触发 | boolean | false |

Slots

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

Exposes

名称详情类型
contentRefsi-tooltip 组件实例object
showshow方法控制 si-tooltip 显示状态Function
hidehide方法控制 si-tooltip 显示状态Function

基于 MIT 许可发布