我有一些代码要执行的操作是使用滚动触发一个功能,该功能应在滚动时触发

if (flg == 0)


但是如果滚动直到5秒钟才发生,该另一个函数将以setTimeout触发,并将变量flg的值更改为1,滚动功能应会中断但不起作用。

setTimeout正在将变量值更新为1,但是即使flg为1,我也不知道为什么滚动功能可以工作。

$(function() {
    var flg = 0;
    //Image Load if Not Scroll ---------------------------
    var timer = setTimeout(function() {
        flg = 1;
        console.log (flg + 'change with timer');
    }, 5000);

    //Image Load On Scroll-----------
    if (flg == 0) {
        $(window).scroll(function () {
            clearTimeout(timer);
            flg = 1;
            console.log (flg + 'srsc');
        });
    };
});


示例https://jsfiddle.net/0p1rob1q/1/

最佳答案

您需要将if语句放在窗口scroll事件处理程序中:

$(window).scroll(function() {
    if (flg == 0) {
        clearTimeout(timer);
        ...
    }
});


覆盖初始的var值时,还需要删除关键字flg,否则它不会影响全局值,而是创建一个新的局部变量。

JSFiddle demo

10-06 12:11