javascript - jQuery——为什么只有第一个条件被执行,或者如果第一个条件为假则根本不执行?

标签 javascript jquery

我试图做的是有一个固定按钮,一旦单击,就会滚动到页面上的特定部分。然而,只有第一个条件被执行,而其他条件似乎被完全忽略,即使第一个条件为假。我在这里做错了什么?下面是代码。

    function scroll() {

        var dob = $('#dob');

        var one = $('#one');
        var two = $('#two');
        var thr = $('#thr');
        var fou = $('#fou');
        var fiv = $('#fiv');

        var scr = $(window).scrollTop();
        var win = $(window).height();

        dob.click(function(){

            if ( scr < win ) {
                    $('html, body').delay(125).animate({
                        'scrollTop' : two.offset().top
                    });
            }

            else if ( scr >= win && scr < (win * 2) ) {
                    $('html, body').delay(125).animate({
                        'scrollTop' : thr.offset().top
                    });
            }

            else if ( scr >= win * 2 && scr < (win * 3) ) {
                    $('html, body').delay(125).animate({
                        'scrollTop' : fou.offset().top
                    });
            }

            else if ( scr >= win * 3 && scr < (win * 4) ) {
                    $('html, body').delay(125).animate({
                        'scrollTop' : fiv.offset().top
                    });
            };

        });

    };

    $(document).ready(function(){scroll();});

最佳答案

这是因为当您的 scroll 函数在文档就绪时运行时,scrwin 的值仅设置一次。您可能希望在每次调用 click 时刷新它们。

所以正确的版本应该是:

function scroll() {
    var dob = $('#dob');
    var one = $('#one');
    var two = $('#two');
    var thr = $('#thr');
    var fou = $('#fou');
    var fiv = $('#fiv');
}


dob.click(function() {
    var scr = $(window).scrollTop();
    var win = $(window).height();

    if (scr < win) {
        $('html, body').delay(125).animate({
            'scrollTop': two.offset().top
        });
    } else if (scr < (win * 2)) {
        $('html, body').delay(125).animate({
            'scrollTop': thr.offset().top
        });
    } else if (scr < (win * 3)) {
        $('html, body').delay(125).animate({
            'scrollTop': fou.offset().top
        });
    } else if (scr < (win * 4)) {
        $('html, body').delay(125).animate({
            'scrollTop': fiv.offset().top
        });
    };

});

$(document).ready(function() {
    scroll();
});

关于javascript - jQuery——为什么只有第一个条件被执行,或者如果第一个条件为假则根本不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34887445/

相关文章:

javascript - 如何根据模型属性为 Backbone.js View 动态设置类名?

php - 完成后在ajax之后获取变量

jquery - Ajax 响应中的 Flowplayer 视频

javascript - 输入类型日期错误的设置值

javascript - 从 JSON 中删除项目,从 json obj 中删除 'reset' 索引 - jquery

javascript - 使用基于 URL 的 Javascript 加载 Javascript 文件

javascript - JS 中的构造函数和原型(prototype)属性

jquery - jquery 中的 onclick 函数在 Firefox 中不起作用

javascript - 如何在 react-styleguidist 中添加具有依赖关系的组件示例

javascript - 删除 Javascript 中的所有反斜杠