前端小白必须掌握的调试 Tooltip 的思路

缘由

大家在使用 Tooltip 组件的时候,都会遇到下面的情况

当鼠标 hover 上按钮,Tooltip 显示,如果此时需要调试 Tooltip 里的内容,因为鼠标移出导致 Tooltip 消失。

当我们在本地代码开发时,我们可以通过修改 hover 交互,方便调试,但是如果不能本地调试, Tooltip 这样的交互导致调试困难,下面就讲述在线上如何调试 Tooltip 的几种方式

hover 触发 Tooltip

利用 :hover 伪类选择器实现 Tooltip 显示与隐藏,示例代码如下

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Tooltip Example</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      background-color: #f0f0f0;
    }

    .tooltip-container {
      position: relative;
      display: inline-block;
    }

    .tooltip-button {
      padding: 10px 20px;
      font-size: 16px;
      cursor: pointer;
      border: none;
      background-color: #007bff;
      color: white;
      border-radius: 5px;
      transition: background-color 0.3s ease;
    }

    .tooltip-button:hover {
      background-color: #0056b3;
    }

    .tooltip {
      visibility: hidden;
      width: 140px;
      background-color: #333;
      color: #fff;
      text-align: center;
      border-radius: 5px;
      padding: 8px 0;
      position: absolute;
      z-index: 1;
      bottom: 125%; /* Position the tooltip above the button */
      left: 50%;
      margin-left: -70px; /* Center the tooltip */
      opacity: 0;
      transition: opacity 0.3s ease;
    }

    .tooltip::after {
      content: "";
      position: absolute;
      top: 100%; /* Arrow pointing downwards */
      left: 50%;
      margin-left: -5px;
      border-width: 5px;
      border-style: solid;
      border-color: #333 transparent transparent transparent;
    }

    .tooltip-container:hover .tooltip {
      visibility: visible;
      opacity: 1;
    }

  </style>
</head>
<body>
<div class="tooltip-container">
  <button class="tooltip-button">Hover me</button>
  <div class="tooltip">This is a tooltip</div>
</div>
</body>
</html>

在上面的示例代码中

css 复制代码
.tooltip-container:hover .tooltip {
    visibility: visible;
    opacity: 1;
  }

这一段代码是核心逻辑,所以在线上产品中,我们要找到这段实现逻辑,让 :hover 处于激活状态,以方便调试

选择指定的 DOM,点击右侧的 :hov 选项,选中 hover 选项,Tooltip 就会一直显示在页面上,方便我们调试。大家按照我说的方式可以试一试

控制 class 类名

除了利用 CSS 的 :hover 控制 Tooltip 外,还可以使用 JS 通过控制 CSS 类来控制 Tooltip 的显示与隐藏

下面使用大名鼎鼎的 Ant Design 组件库中的 Tooltip 组件举例子。下面是 Ant Design 官网 Tooltip 的例子

我们重点关注 pink 按钮,鼠标移入,Tooltip 内容显示,鼠标移出,Tooltip 内容消失

当鼠标移入,Tooltip 内容显示,此时 class 内容如下

当鼠标移出,Tooltip 内容消失,此时 class 内容如下

通过对比发现,控制 Tooltip 显示与隐藏的是 ant-tooltip-hidden 类,那么只需要找到 ant-tooltip-hidden 声明的样式,修改样式可以让 Tooltip 内容一直显示,方便调试

从上面的分析中可以看出,实现 Tooltip 的显示和隐藏逻辑,背后都是通过样式控制的

利用断点调试

Chrome DevTools 的断点是一种调试工具,允许你在特定的 DOM 元素发生修改时暂停 JavaScript 代码的执行。这样你可以在 DOM 树的更改时检查和调试 JavaScript 代码,特别是与 DOM 交互相关的代码。可以利用断点调试 Tooltip 的内容

请看下面的示例代码

jsx 复制代码
import React, { useState } from "react";
import "./Tooltip.css";

const Tooltip = ({ text, children }) => {
  const [showTooltip, setShowTooltip] = useState(false);

  const handleMouseEnter = () => {
    setShowTooltip(true);
  };

  const handleMouseLeave = () => {
    setShowTooltip(false);
  };

  return (
    <div
      className="tooltip-container"
      onMouseEnter={handleMouseEnter}
      onMouseLeave={handleMouseLeave}
    >
      {children}
      {showTooltip && <div className="tooltip">{text}</div>}
    </div>
  );
};

export default Tooltip;

上面的示例代码使用 JS 来控制 Tooltip 内容,当调用 onMouseEnter 事件时,tooltip 内容显示,当调用 onMouseLeave 时,tooltip 内容消失

打开开发者工具,找到 Mouse 相关断点,勾选上

当鼠标移入,会有下面的效果

找到对应的 DOM 节点,就可以调试 Tooltip 里面的内容

总结

不管采用那种方式实现 Tooltip 的显示和隐藏逻辑,背后都是通过样式控制,所以调试 Tooltip 一定要耐心找到控制的样式

相关推荐
华玥作者13 小时前
[特殊字符] VitePress 对接 Algolia AI 问答(DocSearch + AI Search)完整实战(下)
前端·人工智能·ai
Mr Xu_14 小时前
告别冗长 switch-case:Vue 项目中基于映射表的优雅路由数据匹配方案
前端·javascript·vue.js
前端摸鱼匠14 小时前
Vue 3 的toRefs保持响应性:讲解toRefs在解构响应式对象时的作用
前端·javascript·vue.js·前端框架·ecmascript
lang2015092814 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
好家伙VCC15 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
未来之窗软件服务16 小时前
未来之窗昭和仙君(六十五)Vue与跨地区多部门开发—东方仙盟练气
前端·javascript·vue.js·仙盟创梦ide·东方仙盟·昭和仙君
嘿起屁儿整16 小时前
面试点(网络层面)
前端·网络
VT.馒头16 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
phltxy17 小时前
Vue 核心特性实战指南:指令、样式绑定、计算属性与侦听器
前端·javascript·vue.js
Byron070718 小时前
Vue 中使用 Tiptap 富文本编辑器的完整指南
前端·javascript·vue.js