2015-05-07 35 views
1

我有一些代码,我想要做的是触发与滚动一个功能,应该变量值与setTimeout的改变

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/

+1

这听起来像在代码中的逻辑错误。 – Regent

回答

3

你需要把if声明您的视窗scroll事件处理程序:

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

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

JSFiddle demo

0

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

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

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