麻烦一下,else(){ }中的.removeClass("color")为什么没有执行?

$(document).ready(function() {
    var navoffeset=$(".header").offset().top;
    $(window).scroll(function(){
        var scrollpos=$(window).scrollTop(); 
        if(scrollpos >=navoffeset){
            $(".header").addClass("fixed")      
                        .addClass("color"); 
        }else{ 
            $(".header").removeClass("fixed")
                        .removeClass("color");//移出这个类
        }
    });
});
阅读 2.2k
2 个回答

给你分析一下,你获取navoffeset的offset().top,初始的时候offset().top肯定不小于scrollTop()。假如offset().top和scrollTop()相等,相等的情况是scrollTop()和offset().top都为0,执行if语句。之后你滚动scrollTop()一直大于offset().top,仍然只执行if语句。当offset().top大于scrollTop(),执行else语句,这时候你还没有addClass,所以移除是没有效果的,随着滚动增加,你的scrollTop()等于然后大于offset().top,执行if语句,你若一致往下滑,只执行if语句,你应该在回滚到最上边,才会执行else语句,scrollTop()小于offset().top,此时已经addClass了,那么现在removeClass开始起作用。如果你的offset().top一开始和scrollTop()相等的情况下,else语句永远不会执行。只执行if语句。

当你刚刚滚到想要看到的元素那一刻$(".header").offset().top的值等于$(window).scrollTop()+$(window).height(),所以元素的高度初始必定大于$(window).scrollTop(),所以一开始你的函数先运行else里的语句,当滚轮向下滚动的距离超过了$(".header").offset().top才会运行if;
我想你是忘记了$(window).height()--当前视窗的可是高度这个东西吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题