气泡提示
Poptip 是一个轻量级的文字提示组件,主要用于解释界面元素(如按钮、文字)的含义或提供简短的辅助信息。与 Popinfo 相比,它的体积更小,不包含标题,视觉风格更为紧凑,且交互逻辑更偏向于“即指即显”。
基础用法
组件调用
最标准的使用方式,将 <TuiPoptip> 包裹在触发元素外。content 属性用于定义提示内容。
<template>
<div class="demo-box">
<TuiPoptip content="这是一个基础提示">
<TuiButton>Hover Me</TuiButton>
</TuiPoptip>
<TuiPoptip
content="Danger Type / Bottom"
type="danger"
placement="bottom"
>
<TuiButton type="danger">删除</TuiButton>
</TuiPoptip>
</div>
</template>指令调用
通过 v-tui-popover 指令可以减少层级嵌套,直接将提示绑定到目标元素上。
提示:指令调用的默认
appearance即为'poptip',因此无需像Popinfo那样显式指定外观。
<template>
<TuiButton
v-tui-popover="{
content: '通过指令显示的 Poptip',
placement: 'right',
type: 'primary'
}"
>
指令触发
</TuiButton>
</template>视觉风格
Poptip 支持与 Popinfo 同样丰富的色彩与色调组合,以适应各种背景深度和语义场景。
Type 语义色与 Tone 色调
通过 type 定义语义颜色,配合 tone 控制色调强度。
<template>
<div class="row">
<TuiPoptip content="Primary Type" type="primary">
<TuiButton type="primary">Primary</TuiButton>
</TuiPoptip>
<TuiPoptip content="Strong Tone" type="success" tone="strong">
<TuiButton type="success">Success Strong</TuiButton>
</TuiPoptip>
<TuiPoptip content="Invert Tone" type="warning" tone="strongInvert">
<TuiButton type="warning">Warning Invert</TuiButton>
</TuiPoptip>
</div>
</template>磨砂玻璃效果
开启 transparent 和 backgroundBlur 可实现背景模糊的半透明效果,通常配合 tone="weak" 使用效果最佳,能呈现出精致的视觉质感。
<template>
<TuiPoptip
content="Glass Effect Poptip"
:transparent="true"
:backgroundBlur="true"
tone="weak"
>
<TuiButton>磨砂效果</TuiButton>
</TuiPoptip>
</template>函数式调用
在某些无法绑定 DOM 的场景(如 Canvas 绘图区域、图表内部元素交互、异步操作反馈)中,可以使用全局注入的 $tPopover 方法手动唤起提示。
<script setup>
import { inject } from 'vue'
const $tPopover = inject('$tPopover')
const openManualPoptip = (event) => {
$tPopover({
event: event, // 必须传入事件对象或目标 DOM,用于计算位置
// appearance: 'poptip', // 默认为 poptip,可省略
content: '这是一个通过 JS 动态调用的 Poptip',
type: 'info',
trigger: 'click', // 函数调用通常配合 click 或手动逻辑
showTrigger: true // 显示点击波纹动画
})
}
</script>
<template>
<div class="manual-area" @click="openManualPoptip">
点击此区域触发函数式 Poptip
</div>
</template>API 参考
Props
| 属性名 | 说明 | 类型 | 可选值 (完整列表) | 默认值 |
|---|---|---|---|---|
| content | 提示内容 | String | — | — |
| placement | 弹出位置 | String | 'top', 'top-start', 'top-end', 'right', 'right-start', 'right-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end' | 'top' |
| type | 语义类型 | String | 'default', 'invert', 'primary', 'success', 'warning', 'danger', 'info', 'emphasis' | null |
| tone | 色调强度 | String | 'base', 'weak', 'strong', 'strongInvert', 'extremeInvert' | 'base' |
| shadowColor | 阴影强度 | String | 'weakest', 'weaker', 'weak', 'base', 'strong', 'stronger', 'strongest', 'match' | 'weak' |
| trigger | 触发方式 | String | 'hover', 'click' | 'hover' |
| appearance | 外观模式 (指令/函数调用时) | String | 'poptip', 'popinfo' | 'poptip' |
| offset | 偏移距离 (px) | Number | — | 8 |
| showArrow | 是否显示箭头 | Boolean | — | true |
| enterable | 鼠标是否可进入提示内部 | Boolean | — | false |
| autoClose | 点击外部是否自动关闭 | Boolean | — | true |
| transparent | 是否开启背景半透明 | Boolean | — | true |
| backgroundBlur | 是否开启背景模糊 | Boolean | — | true |
| disabled | 是否禁用 | Boolean | — | false |
| delay | 显示延迟 (ms) | Number | — | 500 |
| duration | 自动关闭时间 (ms),0 为常驻 | Number | 0 (常驻) 或具体毫秒数 | 3000 |
| hasShadow | 是否显示阴影 | Boolean | — | true |
Slots (组件模式)
| 插槽名 | 说明 |
|---|---|
| default | 触发提示的目标元素 |
Global Methods
| 方法名 | 说明 | 参数 |
|---|---|---|
| $tPopover | 创建一个 Poptip 实例 | (options: Object) => void |
| $tPopoverCloseAll | 关闭所有 JS/事件创建的实例 | () => void |
| $tPopoverDirectiveCloseAll | 关闭所有指令创建的实例 | () => void |
全局 ESC 监控
为了提供统一且优雅的键盘交互体验,所有浮动组件深度集成了 TechUI 的全局服务(TuiService)。
组件内部会实时监听全局的 EscCounter 参数。当用户按下 Esc 键时,全局服务会更新该计数器,组件捕获到这一变化后,会自动触发隐藏逻辑。这种机制确保了无论页面中有多少个独立的浮层,都能响应统一的关闭指令,无需开发者手动绑定键盘事件。
定位依赖
TechUI 的气泡与弹层组件底层完全依赖于业界成熟的 Floating UI 库进行锚点定位计算。
这意味着您无需担心复杂的几何计算,组件能够自动处理以下场景:
- 碰撞检测 (Flip):当预设位置空间不足时(如屏幕边缘),自动翻转到对面位置。
- 视口修正 (Shift):确保气泡始终保持在视口可见范围内,不会被截断。
- 精准偏移:通过
offset属性实现像素级的精确定位。
您只需通过组件的 placement 属性指定期望方位,剩下的复杂计算均由底层引擎自动完成。