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

鼠标滚动至指定偏移位置时事件触发两次问题求助

问题描述

仅在普通PC鼠标上出现异常:滚动鼠标滚轮时,scroll事件会被触发两次,导致alert弹窗弹出两次。使用Apple妙控鼠标或手动拖动浏览器滚动条时无此问题。以下是使用的jQuery代码,请问存在遗漏或操作错误吗?

$(document).ready(function () {
    $(window).scroll(function () {
        if ($(window).scrollTop() >= $(
          '#ajax-posts').offset().top + $('#ajax-posts').
            outerHeight() - window.innerHeight) {
                alert('reached check point');
                $("#lds-ripple").css("display", "block");
        }
    });
});
解决方案

这个问题源于PC鼠标滚轮滚动时,部分浏览器会短时间内重复触发scroll事件,而你的代码没有做触发频率限制或状态校验,导致满足条件时多次执行目标操作。

可以通过以下两种方式解决:

  • 防抖(Debounce)限制触发频率:通过定时器延迟执行代码,避免短时间内重复触发
    修改后的代码示例:

    $(document).ready(function () {
        let scrollTimeout;
        $(window).scroll(function () {
            clearTimeout(scrollTimeout);
            scrollTimeout = setTimeout(function() {
                const targetEl = $('#ajax-posts');
                const isReached = $(window).scrollTop() >= targetEl.offset().top + targetEl.outerHeight() - window.innerHeight;
                if (isReached) {
                    alert('reached check point');
                    $("#lds-ripple").css("display", "block");
                }
            }, 200); // 200ms可根据需求调整
        });
    });
    
  • 状态标记避免重复执行:设置标记位,确保满足条件时仅执行一次操作(若需再次触发可重置标记)
    修改后的代码示例:

    $(document).ready(function () {
        let hasTriggered = false;
        $(window).scroll(function () {
            const targetEl = $('#ajax-posts');
            const isReached = $(window).scrollTop() >= targetEl.offset().top + targetEl.outerHeight() - window.innerHeight;
            
            if (isReached && !hasTriggered) {
                hasTriggered = true;
                alert('reached check point');
                $("#lds-ripple").css("display", "block");
            } 
            // 若需要滚动离开后再次触发,可添加以下逻辑
            else if (!isReached && hasTriggered) {
                hasTriggered = false;
            }
        });
    });
    

如果需求是滚动到目标位置仅触发一次,优先选择状态标记方案;若需滚动过程中多次触发但避免高频重复,防抖方案更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:52:20