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

相关推荐
速易达网络21 小时前
Bootstrap 5 响应式网站首页模板
前端·bootstrap·html
etsuyou21 小时前
js前端this指向规则
开发语言·前端·javascript
lichong95121 小时前
Android studio 修改包名
android·java·前端·ide·android studio·大前端·大前端++
cai_huaer21 小时前
BugKu Web渗透之 cookiesWEB
前端·web安全
lichong95121 小时前
Git 检出到HEAD 再修改提交commit 会消失解决方案
java·前端·git·python·github·大前端·大前端++
友友马1 天前
『 QT 』QT控件属性全解析 (一)
开发语言·前端·qt
不想上班只想要钱1 天前
vue3+vite创建的项目,运行后没有 Network地址
前端·javascript·vue.js
流***陌1 天前
手办盲盒抽赏小程序前端功能设计:兼顾收藏需求与抽赏乐趣
前端·小程序
岁月宁静1 天前
在富文本编辑器中封装实用的 AI 写作助手功能
前端·vue.js·人工智能
金士顿1 天前
为什么MainWindow.xaml绑定的datacontext,EtherCATSuiteCtrl.xaml直接用了?
前端