已经提出了类似的问题,但我在这些主题中找不到任何帮助。
看看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函数内设置类,因为该函数也在其他地方使用。
答案 0 :(得分:1)
我认为您想要在滚动选择正确的数字时需要更改:
if (offsetT == 0)
至if (offsetT == posToScroll)
if (offsetT == 0)
将始终选择菜单项1,因为此菜单项的偏移量为0.将if语句更改为if (offsetT == posToScroll)
表示选择窗口滚动到的那个。
答案 1 :(得分:0)
第一个<div>
总是得到类,因为它是窗口顶部的那个
它有0
偏移量。因此
if (offsetT == 0) {
仅在其案例中评估为真。