You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React自定义跟随光标导致ProjectCard的mouseenter与mouseleave事件异常触发

问题根因

你实现的自定义光标包含的.circle、.circle-follow两个DOM元素默认会响应鼠标事件,且层级高于下层的ProjectCard组件。当鼠标移入ProjectCard区域时,自定义光标元素会跟随鼠标移动,出现在鼠标指针和ProjectCard之间,导致鼠标被判定为悬停在光标元素上,触发ProjectCard的mouseleave事件;光标元素跟随鼠标偏移离开当前位置后,鼠标又重新接触到ProjectCard,触发mouseenter事件,循环往复就出现了事件反复触发的问题。

解决方案

给两个自定义光标元素添加CSS属性pointer-events: none,该属性会让元素完全不接收任何鼠标交互事件,鼠标指针可以直接穿透元素命中下层的内容,不会干扰原有组件的鼠标事件触发。

你可以选择两种实现方式:

方式1:直接在组件内联样式添加

修改Cursor组件的返回部分代码:

return (
  <>
    <div className="circle" ref={cursorRef} style={{ pointerEvents: 'none' }}></div>
    <div className="circle-follow" ref={cursorFollowerRef} style={{ pointerEvents: 'none' }}></div>
  </>
);

方式2:在全局CSS中添加

.circle, .circle-follow {
  pointer-events: none;
  /* 保留原有其他样式不变 */
}

修改完成后即可实现预期效果:鼠标移入ProjectCard仅触发一次mouseenter,完全移出时仅触发一次mouseleave,组件内部移动鼠标不会重复触发事件。

内容的提问来源于stack exchange,提问作者Krešimir Galić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:48:05