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

如何用JavaScript实现多个按钮悬停时动画跟随光标效果

按钮悬停跟随光标动画多元素适配方案

优化CSS定位逻辑

首先需要给.btn新增相对定位属性,避免伪元素的绝对定位参照根节点,导致位置偏移,以下是完整可直接使用的CSS代码,额外补充了交互优化项:

.btn {
  position: relative; /* 必须新增:让伪元素相对按钮本身定位 */
  display: block;
  width: 150px;
  height: 50px;
  background: #666;
  margin: 10px;
  overflow: hidden; /* 可选:避免悬停效果超出按钮边界 */
}

.btn::before {
  content: '';
  position: absolute;
  transform: translate(-50%, -50%); /* 可选:让圆点中心对齐光标位置 */
  top: var(--y);
  left: var(--x);
  width: 0;
  height: 0;
  border-radius: 50%; /* 可选:改成圆形效果更自然 */
  background: #ff0000;
  transition: all .1s ease; /* 可选:加过渡让动画更流畅 */
}

.btn:hover::before {
  width: 30px;
  height: 30px;
}

修改JavaScript遍历逻辑

将单个元素选择改为批量选择,遍历所有按钮绑定事件,事件触发时针对当前触发的按钮计算坐标:

// 选中页面中所有class为btn的元素
const btns = document.querySelectorAll('.btn');

// 遍历每个按钮单独绑定鼠标移动事件
btns.forEach(btn => {
  btn.onmousemove = function(e) {
    // offsetX、offsetY可直接获取光标相对于当前元素的坐标,无需手动计算
    btn.style.setProperty('--x', e.offsetX + 'px')
    btn.style.setProperty('--y', e.offsetY + 'px')
  }
})

适配说明

原代码仅通过querySelector选中了第一个.btn元素,因此只有第一个按钮生效。替换为querySelectorAll获取所有按钮后,遍历为每个按钮单独绑定事件,即可实现所有按钮都支持光标跟随动画。

内容的提问来源于stack exchange,提问作者Agnes Tom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:09:00