为什么这个if语句继续执行?

时间:2014-04-10 08:40:45

标签: jquery offset flags scrolltop

我有一个由几个部分组成的页面(想想经典的parralax设置)。现在,我已经构建了所有内容,当我滚动它们时,我想开始让某些部分做很酷的事情。

在我的无知中,我认为这意味着我需要为每个位置获取offset()。top并将其与窗口的scrollTop()进行比较。

以下是我的情况,例如:

$(window).scroll(function(){

    var scrollPosition = $(this).scrollTop();
    var sectionFourPosition = $('.slideFour').offset().top;

    var sectionFourFlag = 0;

    if( sectionFourFlag == 0 && scrollPosition >= sectionFourPosition  ){
        alert("You Passed the Top of Section Four");
        sectionFourFlag++;
    };

    $('.ScrollPositionDisplay').text(scrollPosition);
    $('.SectionFourOffsetDisplay').text(sectionFourPosition);
    $('.SectionFourFlagDisplay').text(sectionFourFlag);

}); 

我有一个小小组用来向我展示项目中各种变量的状态。我有sectionFourFlag那里,因为我只希望这次执行一次。我想我可以将标志翻转为1,这应该打破IF语句...

没有这样的运气。尽管Flag显示为一体,它仍然继续运行。因此,对于每个incirment,我滚过“sectionFourPosition”,警报再次,再次,再次...

此SEEMS应该可以使用,而我的GoogleFu让我失望。

我遗漏了什么?

2 个答案:

答案 0 :(得分:1)

你做得很好,有一个错误:

$(window).scroll(function(){

    var scrollPosition = $(this).scrollTop();
    var sectionFourPosition = $('.slideFour').offset().top;

    var sectionFourFlag = 0;

    if( sectionFourFlag == 0 && scrollPosition >= sectionFourPosition  ){
        alert("You Passed the Top of Section Four");
        sectionFourFlag++;
    };

    $('.ScrollPositionDisplay').text(scrollPosition);
    $('.SectionFourOffsetDisplay').text(sectionFourPosition);
    $('.SectionFourFlagDisplay').text(sectionFourFlag);

}); 

每次滚动时都会重置sectionFourFlag。您应该将var sectionFourFlag = 0;放在滚动功能之外,例如:

var sectionFourFlag = 0;

$(window).scroll(function(){

    var scrollPosition = $(this).scrollTop();
    var sectionFourPosition = $('.slideFour').offset().top;

    if( sectionFourFlag == 0 && scrollPosition >= sectionFourPosition  ){
        alert("You Passed the Top of Section Four");
        sectionFourFlag++;
    };

    $('.ScrollPositionDisplay').text(scrollPosition);
    $('.SectionFourOffsetDisplay').text(sectionFourPosition);
    $('.SectionFourFlagDisplay').text(sectionFourFlag);

}); 

答案 1 :(得分:0)

这是你的问题:

var sectionFourFlag = 0;

if( sectionFourFlag == 0 && scrollPosition >= sectionFourPosition  ){

在JavaScript中定义sectionFourFlag == 0时,部分sectionFourFlag永远不会出错;你需要在这个程序之外初始化它。