Element Plus 组件库实现:3. Tooltip(1)——思路

1,119 阅读3分钟

前言

在现代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

image.png 这里先来看一个第三方库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',
});

效果:

image.png

可以看到,使用的方法很简单,需要两个DOM元素,也就是触发区域和展示区域,将这两个元素和placement作为参数传到createPopper方法中并且执行createPopper方法就可以了,其他更多神奇的效果见 popper.js官方文档,这里不再一一列举,接下来我们将借助这一第三方库完成对应的效果。

设计思路

结合以上内容,可以列举出大概的设计思路:

  • 实现基本的显示/隐藏
  • 实现click/hover触发
  • 实现点击空白处隐藏
  • 支持手动触发,比如将触发事件绑定到一个button上
  • 支持popper参数
  • 可能还需要动画效果和其他样式

代码实现

歇一会儿,下一小节再写吧

总结

本文从需求分析,确定方案,设计思路四个方面简单介绍了Tooltip组件的基本实现方式,注意这里需要借助一个第三方库——popperjs来帮助我们完成一些效果,这样可以节省大量开发时间,具体代码实现后续补充。如有错误还请大佬评论指正。