前言
在现代Web开发中,Tooltip组件已经成为提升用户体验和界面交互性的重要元素。Tooltip,即工具提示,是一种在用户与页面元素交互时,提供额外信息或说明的轻量级弹窗。它的出现不仅丰富了页面内容的展示方式,还帮助用户更好地理解页面元素的功能和使用方法。
本文将介绍Tooltip组件的简单实现思路,从需求分析、确定方案、设计思路三个方面解析如何开发一个基本的的Tooltip组件。
需求分析
先来看下Tooltip组件需要具备什么功能:
- 基本功能:
- 触发区域
- 展示区域
- 触发方式:
- click触发
- hover触发
- 手动触发
- 隐藏方式:与触发方式相似,但是有的需要点击空白处也实现隐藏
以上就是Tooltip组件需要的基本功能,也是在开发中较为常用的,重点可以总结为一句话:在触发区域发生特定事件的时候,展示区域的隐藏和显示进行切换
确定方案
初步确定属性和事件:
export interface TooltipProps {
// 显示内容
content?: string
// 触发方式
trigger?: 'hover' | 'click'
// 手动控制
manual?: boolean
}
// 改变状态发出事件
export interface TooltipEmits {
(e: 'visible-change', value: boolean): void
// 点击空白处隐藏
(e: 'click-outside', value: boolean): void
}
// 使用户可以手动打开或关闭弹框
export interface TooltipInstance {
show: () => void
hide: () => void
}
确定组件基本内容:
<template>
<div class="yv-tooltip">
<!-- 触发区域 -->
<div class="yv-tooltip__trigger">
<slot></slot>
</div>
<!-- 展示区域 -->
<div v-if="isOpen" class="yv-tooltip__popper" ref="popperNode">
// 具名插槽用于展示显示内容
<slot name="content"></slot>
</div>
</div>
</template>
第三方库popper.js
这里先来看一个第三方库popper.js,为什么需要用到这个库呢,先来看上边的图片,这是element plus的Tooltip组件的基础用法,也就是展示区域可以根据一个
placement
属性来决定展示效果,比如展示的方向、对其位置,那么如果让我们手动去写的话,这就要涉及到不小的计算量和更复杂的需求,当然这并不是本组件库实现的重点内容,所以这里我们可以借助一个第三方库来实现相应的效果—— popper.js ,接下来先看这个库是如何使用的:
使用popper.js
安装:
npm i @popperjs/core
使用:
这里简单展示使用方法
import { createPopper } from '@popperjs/core';
const button = document.querySelector('#button');
const tooltip = document.querySelector('#tooltip');
createPopper(button, tooltip, {
placement: 'right',
});
效果:
可以看到,使用的方法很简单,需要两个DOM元素,也就是触发区域和展示区域,将这两个元素和placement作为参数传到createPopper
方法中并且执行createPopper
方法就可以了,其他更多神奇的效果见 popper.js官方文档,这里不再一一列举,接下来我们将借助这一第三方库完成对应的效果。
设计思路
结合以上内容,可以列举出大概的设计思路:
- 实现基本的显示/隐藏
- 实现click/hover触发
- 实现点击空白处隐藏
- 支持手动触发,比如将触发事件绑定到一个button上
- 支持popper参数
- 可能还需要动画效果和其他样式
代码实现
歇一会儿,下一小节再写吧
总结
本文从需求分析,确定方案,设计思路四个方面简单介绍了Tooltip组件的基本实现方式,注意这里需要借助一个第三方库——popperjs来帮助我们完成一些效果,这样可以节省大量开发时间,具体代码实现后续补充。如有错误还请大佬评论指正。