Skip to content

Tooltip 文字提示

文字提示,在鼠标 hover 时显示提示文字。

TIP

todo: 目前只是做了简单封装,待完善(effect 部分)

基础用法

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

<style>
	.tooltip-base-box {
		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 {
		width: 110px;
		margin-top: 10px;
	}
</style>

更多内容的文字提示

展示多行文本或者设置内容的格式 通过 content 插槽设置内容

<template>
	<vr-tooltip placement="top">
		<template #content> multiple lines<br />second line </template>
		<vr-button>Top center</vr-button>
	</vr-tooltip>
</template>

禁用状态

禁用状态,鼠标悬停无法触发文字提示。disabled 属性可以满足这个需求。

<script lang="ts" setup>
	import { ref } from 'vue'

	const disabled = ref(false)
</script>

<template>
	<vr-tooltip
		:disabled="disabled"
		content="click to close tooltip function"
		placement="bottom">
		<vr-button @click="disabled = !disabled"
			>click to {{ disabled ? 'active' : 'close' }} tooltip function</vr-button
		>
	</vr-tooltip>
</template>

延迟显示

<template>
    <vr-tooltip
      content="延迟 1000ms 后消失"
      :show-timeout="500"
      :hide-timeout="1000">
      <vr-button>延迟 500ms 后出现</vr-button>
    </vr-tooltip>
  </template>

Popper 配置

Popper.js 的定位策略(如 'bottom') 具体使用见 popper.js

示例 放置被设置为底部 ,但如果该放置不适合,则将使用相反的顶部放置

<script lang="ts" setup>
	import { onMounted, ref } from 'vue'

	const boundary = ref<string | Element>('viewport') // 默认值

	onMounted(() => {
		const customBoundary = document.querySelector('.custom-boundary')
		if (customBoundary) {
			boundary.value = customBoundary
		}
	})

	const options = {
		fallbackPlacements: ['top-start', 'top-end', 'bottom-start', 'bottom-end'],
		padding: { top: 30, right: 5, bottom: 30, left: 5 },
		boundary: boundary.value, // 动态绑定到 ref 值
		rootBoundary: 'document',
		flipVariations: true,
		allowedAutoPlacements: ['top', 'bottom'],
	}
</script>

<template>
	<vr-tooltip
		content="Try to scroll"
		placement="bottom"
		:popperOptions="options">
		<vr-button>尝试向上滚动</vr-button>
	</vr-tooltip>
</template>

Tooltip API

Props

NameDescriptionTypeDefault
content提示文字string-
disabled是否禁用booleanfalse
placement弹出位置stringbottom
trigger触发方式stringhover
manual手动控制booleanfalse
popper-optionspopper 配置object 参考popper.js{}
transition动画stringfade
show-timeout显示延时number0
hide-timeout隐藏延时number200

Events

NameDescriptionType
visible-change显示隐藏状态改变时触发(visible: boolean) => void
click-outside点击外部时触发() => void

Slots

NameDescription
default默认插槽
content内容插槽

Expose

NameDescriptionType
show显示() => void
hide隐藏() => void