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

如何避免鼠标移动时img.src被持续重复设置?

解决方案

问题核心是onMove事件触发频率极高,只要鼠标在按钮上移动,就会重复执行img.src = el.dataset.src——哪怕当前图片的src已经和目标路径一致,完全没必要重复设置。

解决思路很简单:在赋值前增加判断,仅当当前图片的src与按钮的目标路径不相等时,才更新src。

修改后的onMove函数代码

onMove(e) {
  const el = e.target

  if (el.type == 'button') {
    const img = tail.querySelector('img')
    // 对比当前路径与目标路径,不一致才更新
    if (img.src !== el.dataset.src) {
      img.src = el.dataset.src
    }
  }

  gsap.to(tail,{
    x:e.clientX,
    y:e.clientY
  })
}

补充优化(避免路径格式差异问题)

注意img.src获取到的是浏览器解析后的绝对路径(比如http://yourdomain.com/dist/img/1.jpg),而el.dataset.src是你写的相对路径,极端情况下可能因为格式不一致导致判断失效。可以给元素加唯一标识来对比:

优化版HTML

<button type="button" data-src="./dist/img/1.jpg" data-img-id="1">
  text 1
</button>
<button type="button" data-src="./dist/img/2.jpg" data-img-id="2">
  text 2
</button>
<button type="button" data-src="./dist/img/3.jpg" data-img-id="3">
  text 3
</button>

优化版JS

onMove(e) {
  const el = e.target

  if (el.type == 'button') {
    const img = tail.querySelector('img')
    // 用唯一标识对比,不受路径格式影响
    if (img.dataset.imgId !== el.dataset.imgId) {
      img.src = el.dataset.src
      img.dataset.imgId = el.dataset.imgId
    }
  }

  gsap.to(tail,{
    x:e.clientX,
    y:e.clientY
  })
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:37:55