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

JavaScript如何实现鼠标悬停启动循环执行函数、移开后停止循环?

实现方案

你需要把setInterval返回的定时器ID存储起来,鼠标移出元素时调用clearInterval清除这个定时器即可实现停止执行的效果。


修改后的代码

HTML代码

<a onmouseover="randomizeHover(1)" onmouseout="stopRandomize(1)" id="link1" class="link" href="#">Home</a>

JS代码

// 全局对象存储不同id对应的定时器,兼容多元素场景
const hoverTimers = {}

function randomize(id) {
  let element = document.getElementById("link" + id);
  element.innerHTML = "Ho" + makeid(2);
}

// 生成随机字母
function makeid(length) {
  var result = "";
  var characters = "abcdefghijklmnopqrstuvwxyz";
  var charactersLength = characters.length;
  for (var i = 0; i < length; i++) {
    result += characters.charAt(Math.floor(Math.random() * charactersLength));
  }
  return result;
}

// 悬停启动定时执行
function randomizeHover(id) {
  console.log("定时器启动");
  // 启动前先清除已有定时器,避免重复触发导致多定时器并行
  if (hoverTimers[id]) clearInterval(hoverTimers[id]);
  // 存储当前id对应的定时器ID
  hoverTimers[id] = setInterval(() => {
    randomize(id);
  }, 200);
}

// 移出停止定时执行
function stopRandomize(id) {
  // 清除对应定时器
  if (hoverTimers[id]) {
    clearInterval(hoverTimers[id]);
    hoverTimers[id] = null;
    // 可选:恢复元素原本的文本内容
    document.getElementById("link" + id).innerHTML = "Home";
  }
}

修改点说明

  • 新增了全局对象hoverTimers存储不同元素对应的定时器ID,支持同时给多个元素添加该效果
  • 给HTML元素新增了onmouseout事件绑定,鼠标移出时触发停止逻辑
  • 启动定时器前先清除已存在的同ID定时器,避免用户快速反复移入导致多个定时器并行执行的bug
  • 停止逻辑中除了清除定时器,还可以根据需求选择是否恢复元素的原始文本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:06:02