使用setTimeout更改变量值

时间:2015-05-07 12:01:40

标签: javascript jquery

我有一些代码,我想要做的是触发一个带滚动的功能,应该在

上触发
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/

2 个答案:

答案 0 :(得分:3)

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

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

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

JSFiddle demo

答案 1 :(得分:0)

您的if需要位于滚动功能中。 它现在的设置方式是,它在分配回调时检查flg的值。相反,它应该根据需要检查它:

$(window).scroll(function abc() {
    if (flg === 0) {
        clearTimeout(timer);
        flg = 1;
        console.log(flg + 'srsc');
    }
});

更新了小提琴:https://jsfiddle.net/9dwyjrnh/