$(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");//移出这个类
}
});
});
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
给你分析一下,你获取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()--当前视窗的可是高度这个东西吧