您遇到的问题是因为您循环遍历所有部分,并相应地更改背景。
因为您没有突破循环(当您匹配该部分时),结果将在循环的下一次迭代中被覆盖。这意味着,所需的功能仅适用于最后一个 .section 在页面上。
.section
要使其适用于所有部分,请在匹配部分后简单地中断循环。在jQuery中 each 功能你可以通过返回来做到这一点 false 。
each
false
您更新的代码:
$(window).scroll(function () { $(".section").each(function () { var box = $("#box"); var BoxTop = box.position().top; var BoxBottom = BoxTop + box.outerHeight(); var section = $(this); var sectionTop = section.position().top - $(window).scrollTop() + 15; var sectionBottom = section.position().top - $(window).scrollTop() + section.height(); if ((sectionTop >= BoxTop && sectionTop <= BoxBottom) || (sectionTop <= BoxTop && sectionBottom >= BoxBottom) || (sectionBottom >= BoxTop && sectionBottom <= BoxBottom)) { section.css("background", "blue"); box.css("background", "blue"); return false; // We found a match, so stop trying to match the other sections. } else { section.css("background", "red"); box.css("background", "red"); } }); });
一个工作小提琴