jquery - jQuery 中的 if 语句总是返回 true

标签 jquery each offset

有人提出了类似的问题,但我在这些主题中找不到任何帮助。

看看this fiddle 。右侧有一个菜单,可让您滚动到其他部分。

应该发生的情况是,例如,当您单击“3”时,菜单中的“3”会使类“可见”(以较大的字体大小显示)。然而,由于某种原因,第一个列表项总是获得此类。我认为发生这种情况是因为在下面的 if 语句中,第一个 div 因偏移量为零而被评估为 true,这是不正确的。

    $("body > div").each(function () {
        var $this = $(this),
            nextSection = $this.next("div"),
            offsetT = $this.offset().top;
        if (offsetT == 0) {
            $("nav a").removeClass("visible");
            $("a#" + $this.attr("id") + "-button").addClass("visible");
            console.log("a#" + $this.attr("id") + "-button");
        }
    });

另一种解释可能是由于函数被作为回调调用而出现问题。我这样做是故意的,因为当它被作为回调调用时,应该没有动画留下,并且容器应该被捕捉到窗口的顶部:所以只能有一个元素具有 offset == 0。但正如您所看到的,这不起作用。

该类必须在 SnapIt 函数内部设置,因为该函数也在其他地方使用。

Where did I go wrong?

最佳答案

我认为您希望在滚动时选择正确的数字,然后您需要更改:
if (offsetT == 0)if (offsetT == posToScroll)

Fiddle

理性

if (offsetT == 0) 将始终选择菜单项 1,因为该菜单项的偏移量为 0。将 if 语句更改为 if (offsetT == posToScroll) code> 表示选择窗口已滚动到的那个。

关于jquery - jQuery 中的 if 语句总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24806263/

相关文章:

jQuery 使用 .each 匹配元素并使用 setTimeout 延迟其处理?

php - 如何让 UNIX_TIMESTAMP 在不同时区时不偏移日期时间字段?

jquery - 如何设置导航高度以动态偏移顶部?

jquery - 如何更改 Bootstrap 多选标签而不是全选?

javascript - 为phonegap应用程序预先创建html服务器端的缺点

javascript - 使用jquery从django解析JSON

javascript - jQuery - ".on"和 ".each"在动态添加的元素上的组合

javascript - 循环结束后重启 jQuery.each()

php - echo $_SESSION 中的非法字符串偏移量

javascript - 清除 Internet Explorer 中的文件输入框