Jquery 每个都不在导航链接上工作

Jquery 每个都不在导航链接上工作,jquery,scroll,Jquery,Scroll,嗨,朋友们,我在一个单页网站上工作。我想当用户滚动和文本的任何部分达到顶部0的适当链接将变成红色 您可以在下面检查或检查我的代码 脚本 $( 'html, body' ).scroll(function() { var windscroll = $(this).scrollTop(); $('.section').each(function(i) { if ($(this).position().top <= windscroll) {

嗨,朋友们,我在一个单页网站上工作。我想当用户滚动和文本的任何部分达到顶部0的适当链接将变成红色

您可以在下面检查或检查我的代码

脚本

$( 'html, body' ).scroll(function() {
    var windscroll = $(this).scrollTop();

    $('.section').each(function(i) {
            if ($(this).position().top <= windscroll) {

                $('.nav li.active').removeClass('active');
                $('.nav li:nth-child('+i+')').addClass('active');
            }else {


        $('.nav li.active').removeClass('active');
        $('.nav li:first').addClass('active');
    }
        });


})
$('html,body')。滚动(函数(){
var windscroll=$(this.scrollTop();
$('.section')。每个(函数(i){

如果($(this).position().top尝试使用此Jquery插件突出显示滚动页面内容的标题。 你也可以找到更多类似的插件

如果您想自己处理突出显示,那么请使用Jquery waypoint插件


解决方案:请参阅工作演示

你做错了几件事,下面是逻辑的解释:

1) 您在html/body上附加了scroll事件,但对它们不起作用,scroll事件会在DOM对象(如document/window/element等)上触发,还要注意,在将事件附加到DOM对象(如document/window)时,不要将其包装为$('window')之类的字符串,因为这样做不起作用,正确的方式是$(window)

2) 您突出显示链接的逻辑不正确

(i) 当用户滚动时,您必须检查是否(sectionTop>=scrollTop),即当用户滚动到节的顶部时,然后突出显示其链接。此时,节的标题与顶部标题底部接触

(ii)还必须考虑节内容高度,当用户向下滚动到区段内容时,必须检查(StopeTop+CeSeSealSealth>>ScLoLTP),然后保持突出其链接。这意味着滚动尚未通过/移动到下一节标题的顶部,并且当前部分内容仍然可见。

(iii)现在,当滚动到下一节标题顶部,即下一节标题顶部接触顶部标题底部时,上一节突出显示条件变为假,现在下一节标题链接突出显示

3)您还必须考虑顶部标题高度,从$$(this).Posits()中减去标题高度。因为您的内容隐藏在粘性标题后面。因此,在您的情况下逻辑顶部是顶部标题底部而不是页面顶部。

你的一些内容超出了栏目组合,这是有意的吗

  $(window).scroll(function () {
        var windscroll = $(this).scrollTop();
        $('.section').each(function (i) {
            if (($(this).position().top - 92) >= windscroll || ($(this).position().top - 92 + $(this).height()) >= windscroll) {
                $('.nav li.active').removeClass('active');
                $('.nav li:nth-child(' + (i + 1) + ')').addClass('active');
                return false; // To break Jquery each loop
            } else { // I don't think this is needed
                //$('.nav li.active').removeClass('active');
                // $('.nav li:first').addClass('active');
            }
        });
    })
使用$(window).scroll(function(){}),JS fiddle Demo-。您可能需要更正您的逻辑,因为现在代码的最后一个选项卡在滚动到底部时没有突出显示。