JavaScript 实现鼠标悬停延迟触发事件的原理与代码
作者:小圆点时间:2026-10-24 21:49:14浏览:382
本文解析了如何在JavaScript中实现鼠标悬停后的延迟触发功能。通过 setInterval 将总延迟时间均分为多次递增判断,当计数达到阈值时执行回调函数,并在鼠标移出时清除定时器以取消延迟。该方法适用于需要避免误操作或优化交互体验的场景,代码包含完整的变量绑定与逻辑控制。
JS鼠标悬停延迟触发原理
实现思路如下:当用户鼠标划过元素时,初始化一个计数器变量 i 为 0。接着启动一个定时器,每隔 100 毫秒使 i 自增 1。当 i 的值等于 10 时,累计时间恰好为 1 秒(10 * 100ms),此时触发目标事件。如果在此过程中鼠标移出,则使用 clearInterval 清除定时器,阻止 i 继续增加,从而取消延迟触发。
核心代码实现
具体实现代码如下:
var delay = function(t, fn) {
var i = 0,
j = 10,
t = (t * 1000) / j,
// 将总延迟时间平均分割为 10 份
_this = this,
// 解决 this 指向问题,调用 delay 函数时需确保 this 指向正确的对象
d = setInterval(function() {
i++;
if (i == j) {
clearInterval(d);
fn.apply(_this);
};
}, t);
_this.onmouseout = function() {
clearInterval(d);
};
} // 测试代码区域
<div id="test" style="border: 1px solid #CCC; width: 100px; height: 100px; background: #666;">这是一个测试DIV把鼠标放在上面2秒后会弹出他的ID</div> [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
作者最新文章
JS在setTimeout或Ajax回调中打开新标签页失败怎么处理
2026-11-05 15:50:12
JS直播协议选型:HLS、FLV与WebRTC的延迟与兼容性对比
2026-11-05 12:16:14
JS实现回到顶部:scrollTop赋值与浏览器兼容性处理
2026-11-04 23:43:35
JS使用classList动态添加、移除和切换CSS类名
2026-11-04 23:40:58
在 D3.js 中实现平滑过渡动画的技巧
2026-11-03 23:46:09
