javascript - 如何简化 Javascript Multiples if?

标签 javascript jquery html if-statement scroll

有没有办法简化 Javascript 的多重 if?

我有这段代码可以在滚动到其他 div 时显示三个不同的 div,但我是 javascript 的新手,我尝试先声明所有变量,但我不确定如何编写 if 部分

$(document).ready(function () {
    var topOfOthDiv1 = $("#cuidamos").offset().top - 490;

    $(window).scroll(function () {
        if ($(window).scrollTop() > topOfOthDiv1) { //scrolled past the other div?
            $("#cuidado").fadeIn(); //reached the desired point -- show div
        } else {
            $('#cuidado').fadeOut();
        }
    });
});

$(document).ready(function () {
    var topOfOthDiv2 = $("#productos").offset().top - 490;

    $(window).scroll(function () {
        if ($(window).scrollTop() > topOfOthDiv2) { //scrolled past the other div?
            $("#sabor").fadeIn(); //reached the desired point -- show div
        } else {
            $('#sabor').fadeOut();
        }
    });
});


$(document).ready(function () {
    var topOfOthDiv3 = $("#encuentranos").offset().top - 490;

    $(window).scroll(function () {
        if ($(window).scrollTop() > topOfOthDiv3) { //scrolled past the other div?
            $("#locat").fadeIn(); //reached the desired point -- show div
        } else {
            $('#locat').fadeOut();
        }
    });
});

最佳答案

摆脱那些冗余的 .ready().scroll() 处理程序,并将所有内容放在一个。

然后将每个要淡入淡出的元素的ID做一个映射到原来的.offset().top位置。

然后在.scroll() handler中,迭代map,使用每个的ID和top值与当前scrollTop()位置进行比较来决定是否应该褪色。

if 语句本身也可以通过使用方括号和条件运算符 选择要动态调用的方法的名称来消除。


$(function () {
    var tops = {
        cuidaado: $("#cuidamos").offset().top - 490,
        sabor: $("#productos").offset().top - 490,
        locat: $("#encuentranos").offset().top - 490
    };

    $(window).scroll(function () {
        var top = $(window).scrollTop();

        $.each(tops, function(id, this_top) {
            $("#" + id)[top > this_top ? "fadeIn" : "fadeOut"]();
        });
    });
});

关于javascript - 如何简化 Javascript Multiples if?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394851/

相关文章:

javascript - 如果新提供的值相同,React 会触发状态更新吗?

javascript - 登录弹出按钮自动弹出,不会直接进入登录表单

javascript - 从 Ajax Jsonp 中获取数据

导航栏的 HTML5 语义结构

javascript - 每隔一分钟刷新 HTML 页面

javascript - Moment.js 添加多个日期之间的差异

javascript - 作为单位矩阵的最大子矩阵

javascript - AJAX 调用的结果,jQuery .append() 不适用于 Laravel 5.4

javascript - 循环多维 UL 生成 javascript 数组

javascript - 无法将表导出为 csv