如何使滚动不一直获取,而是数值变动再获取一次?

代码如下

document.addEventListener('scroll', function () {
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    $('.article-content ul li').each(function(){
        var topset = $(this).offset().top;
        if(scrollTop >= topset){
            $('.item ul li').eq(topindex).addClass('cur').siblings().removeClass('cur');
        }
    });
});

作用:当页面滚动到$('.article-content ul li')时,为左侧列表对应的li添加cur。上面的方法可以实现,我的问题是,我F12查看切换时,发现$('.item ul li')所有的li都在类似刷新的高亮状态。我估摸着是不是滚动因为数值在变导致的一直添加删除class,所以请问该如何解决这一问题?还望能够给予帮助,非常感谢!~

阅读 2k
2 个回答

因为你一直再siblings()使兄弟元素都在一直处于addClass('cur')removeClass('cur')的状态

var $prev=null;
document.addEventListener('scroll', function () {
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    $('.article-content ul li').each(function(){
        var topset = $(this).offset().top;
        if(scrollTop >= topset){
            var $now=$('.item ul li').eq(topindex);
            if($prev!==$now){
                if($prev){
                    $prev.removeClass('cur');
                }
                $prev=$now.addClass('cur');
           }  
        }
    });
});
document.addEventListener('scroll', function () {
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    $('.article-content ul li').each(function(){
        var topset = $(this).offset().top;
        if(scrollTop >= topset && !$('.item ul li').eq(topindex).hasClass("cur")){
            $('.item ul li').eq(topindex).addClass('cur').siblings().removeClass('cur');
        }
    });
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进