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

前言

在现代Web开发中,Tooltip组件已经成为提升用户体验和界面交互性的重要元素。Tooltip,即工具提示,是一种在用户与页面元素交互时,提供额外信息或说明的轻量级弹窗。它的出现不仅丰富了页面内容的展示方式,还帮助用户更好地理解页面元素的功能和使用方法。

本文将介绍Tooltip组件的简单实现思路,从需求分析、确定方案、设计思路三个方面解析如何开发一个基本的的Tooltip组件。

需求分析

先来看下Tooltip组件需要具备什么功能:

  • 基本功能:
    • 触发区域
    • 展示区域
  • 触发方式:
    • click触发
    • hover触发
    • 手动触发
  • 隐藏方式:与触发方式相似,但是有的需要点击空白处也实现隐藏

以上就是Tooltip组件需要的基本功能,也是在开发中较为常用的,重点可以总结为一句话:在触发区域发生特定事件的时候,展示区域的隐藏和显示进行切换

确定方案

初步确定属性和事件:

ts 复制代码
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
}

确定组件基本内容:

html 复制代码
<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

安装:

bash 复制代码
npm i @popperjs/core

使用:

这里简单展示使用方法

js 复制代码
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来帮助我们完成一些效果,这样可以节省大量开发时间,具体代码实现后续补充。如有错误还请大佬评论指正。

相关推荐
Setsuna_F_Seiei4 小时前
前端转型 Agent 开发 06 之 Agent Memory 记忆系统(让 Agent 更智能,更懂你)
前端·agent·ai编程
zhangzeyuaaa4 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
默_笙5 小时前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
优选资讯5 小时前
标签打印软件怎么对接 Excel 数据
前端·excel
一个风轻云淡6 小时前
GCC 和 GDB命令简单解读
java·linux·前端
u0111026757 小时前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式
福兮说7 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
libokaifa7 小时前
把语音模型塞进手机:sherpa-onnx 在 Android 上的 ASR / TTS
前端
deli0078 小时前
DLA 枝晶生长实测:5000 个粒子集体停摆之后,分形维数收敛到 1.70
前端
IT_陈寒8 小时前
Redis卡顿的锅,这次真不是大key的错
前端·人工智能·后端