当前位置: 首页 > web >正文

【React】-组件中实现高性能鼠标跟随提示框的完整优化过程

🧠 组件中实现高性能鼠标跟随提示框的完整优化过程

在开发一个 PDF 阅读器组件时,我们常常需要实现一些交互功能,比如:在用户进行区域选择时,显示一个提示框跟随鼠标移动。这个看似简单的需求,在实际实现中却可能带来性能问题和视觉偏差。

本文将带你回顾我在开发 PDFViewBiz 组件过程中遇到的典型问题与解决思路,包括:

  • 卡顿原因分析;
  • 节流优化;
  • 使用 requestAnimationFrame 控制更新频率;
  • 精准定位技巧;
  • 从类组件到 Hook 模式的重构实践。

📌 一、需求背景

我们需要在用户开启“框选”模式时,显示一个提示信息框(如:“请在单据上拉框有问题的位置”),并让它始终跟随鼠标位置移动。

<div id="box1" ref={box1Ref} style={{ display: "none" }}>请在单据上拉框有问题的位置</div>

🚨 二、卡顿问题初现

最开始采用的是直接操作 DOM 的方式监听 mousemove

const mouseMoveEvent = (event) => {const box1 = box1Ref.current;if (!box1) return;const st = window.scrollY || document.documentElement.scrollTop;const sl = window.scrollX || document.documentElement.scrollLeft;box1.style.cssText = `left: ${event.clientX + sl}px;top: ${event.clientY + st}px;display: block;color: red;position: fixed;`;
};

虽然逻辑正确,但页面出现了严重卡顿,特别是在 PDF 页面滚动或缩放较大的情况下尤为明显。


🔍 三、卡顿原因分析

✅ 原因总结如下:

原因描述
mousemove 触发频率过高每秒可达上百次,频繁触发重排重绘
直接操作 DOM 样式left、top 修改会强制浏览器重新布局
获取 scroll 值未优化引起 Layout Thrashing(布局抖动)

🛠️ 四、第一轮优化:节流处理

为了解决高频触发的问题,使用了 Lodash 的 throttle

import { throttle } from 'lodash-es';const mouseMoveEvent = 
http://www.xdnf.cn/news/9196.html

相关文章:

  • AI赋能引爆短剧全球化风潮,腾讯云媒体处理助力短剧平台出海吸金
  • 中国免税品人工智能商城:引领免税品市场新潮流
  • transformer总结
  • 华为OD机试真题——斗地主之顺子(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • QAtomicInt原子变量的CAS(Compare And Swap)写法与优缺点
  • 通信算法之279:数据链/自组网通信设备--MIMO(2T2R)-OFDM系统系列--实际工程应用算法代码--2.OFDM参数设计及帧结构设计
  • 批量无人值守装机(使用cobbler批量安装windows)
  • 用提示词写程序(2),VSCODE+Claude3.5开发edge扩展插件
  • SuperMap GIS基础产品FAQ集锦(20250519)
  • vue + ant-design + xlsx 实现表格数据导出
  • AcrelEMS 3.0智慧能源管理平台:构建企业微电网数智化中枢
  • watchEffect
  • python神经网络学习小结2
  • python时间序列处理
  • 总结:进程和线程的联系和区别
  • 快速上手SHELL脚本常用命令
  • SAP成本核算-事中控制(成本对象控制/成本归集与结算)
  • OpenGL多重渲染
  • 基于Robust Video Matting 使用Unity 实现无绿幕实时人像抠图
  • GJOI 5.24 题解
  • 时空弯曲和测地线浅谈
  • 开卡包的期望
  • 第12次03 :登录状态的保持
  • 一个简单的系统插桩实现​
  • 龙虎榜——20250526
  • C++虚函数和纯虚函数
  • 云原生技术在企业数字化转型中的战略价值与实践路径
  • MySql(三)
  • 高精度装配人形机器人|产品参数详细介绍
  • Day03