这是我在很多网站上使用的一些代码,朋友帮助清理并完全按照需要工作。让我们说他现在已经遥不可及了一段时间,而且我在尝试调整其中的一部分工作方面遇到了一些麻烦。
this.checkActiveSection = function(){
var fromTop = jQuery(window).scrollTop();
var sections = [];
jQuery('nav ul li a').removeClass('menuactive') ;
jQuery('.anchor').each(function(){
var sectionTopOffset = jQuery(this).offset().top;
var nextSectionTopOffset = jQuery(this).next().offset().top;
if(sectionTopOffset <= fromTop){
sections.push(jQuery(this).data('id'));
}else if($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
sections.push(jQuery(this).data('id'));
}
});
jQuery('nav ul li a, .logo a').removeClass("menuactive");
jQuery('nav ul li a[data-id="'+sections[sections.length - 1]+'"]').addClass('menuactive');
};
this.scrollEasing = function(){
jQuery(window).scroll(this.checkActiveSection);
jQuery('nav ul li a, .logo a').click(function(e){
e.preventDefault();
var idSectionGoto = jQuery(this).closest('a').data('id');
$('html, body').stop().animate({
scrollTop: jQuery('body[data-id="'+idSectionGoto+'"],.anchor[data-id="'+idSectionGoto+'"]').offset().top+1
}, 1500, function(){
_this.checkActiveSection();
});
}) ;
}
这是一个滚动到节的功能,可以在导航按钮中添加和删除“menuactive”类。我最初遇到的问题是,在某些浏览器和屏幕分辨率下,滚动到1px将会关闭,并且您将看不到正确的导航按钮处于活动状态。使用offset()。top + 1似乎很容易解决问题 - 虽然我有一个抱怨它...滚动回到顶部(身体锚)时的+1偏移让我疯了。我已经尝试了很多方法告诉它只将+1应用于“.anchor”类而不是“body”,但它似乎打破了我尝试的任何方法的整个滚动功能。任何帮助将不胜感激。
我唯一的解决方法是使用“body {margin:-1px 0 0;}”,但这看起来有点傻。
谢谢!