-1

当底部页面停留时间少于 4 秒时如何使用 clearTimeout() 取消功能?

当停留在底部页面4秒时,会提醒,没关系^^

但是当在底部停留不到4秒时,然后滚动到顶部,为什么它也会提醒

<script src="http://code.jquery.com/jquery-1.7.2.js"></script>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<script>
$(window).scroll(function(){
    var height = $('#idpage').height();
    var scroll_top = $(this).scrollTop();

    if(($(window).scrollTop() + $(window).height() == $(document).height())){
        var timer = setTimeout(function() {
            alert("bottom");   
        }, 4000);
    }
    else{
        clearTimeout(timer);
    }
});
</script>
4

2 回答 2

0

您已声明timer为局部变量,因此每次scroll调用处理程序时都会使用新的变量引用。相反,您需要保留前一个计时器的值,因此您需要在scroll处理程序范围之外声明变量,例如

var timer;
$(window).scroll(function () {
    var height = $('#idpage').height();
    var scroll_top = $(this).scrollTop();

    if (($(window).scrollTop() + $(window).height() == $(document).height())) {
        timer = setTimeout(function () {
            alert("bottom");
        }, 4000);
    } else {
        clearTimeout(timer);
    }
});
于 2014-09-14T06:06:12.863 回答
0

您需要在滚动事件的顶部定义计时器变量。

var timer = 0;
$(window).scroll(function(){
    var height = $('#idpage').height();
    var scroll_top = $(this).scrollTop();

    if(($(window).scrollTop() + $(window).height() == $(document).height())){
        var timer = setTimeout(function() {
        }, 4000);
    }
    else{
        if ( timer) {
            console.log(timer);
             clearTimeout(timer);
        }


    }
}); 
于 2014-09-14T06:08:35.230 回答