导航锚点不'滚动jQuery时不能正确应用活动类
Nav anchor doesn't apply active class correctly while scroll jQuery
我有一个网站,它在<header>
元素的底部有一个粘性导航,只要我滚动到一个部分,它就会使用data-attributes
激活一个类,这里的错误是:当我滚动active
类时,它会添加到该部分的一半,即使滚动不根据该部分滚动。
我想要的是打开active
类,只要我得到了每个部分的锚,我在下面留下我的代码,后面跟着一个jsfiddle,你可以看到问题出在哪里,我希望你们能帮助我。
HTML:
<header class="testheader">
<nav id="cloud_nav" class="absolute">
<ul>
<li><a href="#" data-scroll="overview">Section 1</a></li>
<li><a href="#" data-scroll="readiness">Section 2</a></li>
<li><a href="#" data-scroll="collaboration">Section 3</a></li>
</ul>
</nav>
</header>
<section data-anchor="overview" style="background: red; font-size: 25px;">
</section>
<section data-anchor="readiness" style="background: green; font-size: 25px;">
</section>
<section data-anchor="collaboration" style="background: #ccc; font-size: 25px;">
</section>
</div>
Javascript:
<script type="text/javascript">
// Sticky Nav
$('#cloud_nav a').on('click', function() {
var scrollAnchor = $(this).attr('data-scroll'),
scrollPoint = $('section[data-anchor="' + scrollAnchor + '"]').offset().top;
$('body,html').animate({
scrollTop: scrollPoint
}, 500);
return false;
})
var navOffset = $('#cloud_nav').offset().top;
$(window).scroll(function(){
var scrollPos = $(window).scrollTop();
if (scrollPos >= navOffset){
$('#cloud_nav').removeClass('absolute');
$('#cloud_nav').addClass('fixed_cloud_nav');
$('section').each(function(i) {
if ($(this).position().top <= scrollPos - 50) {
$('#cloud_nav a.active').removeClass('active');
$('#cloud_nav a').eq(i).addClass('active');
}
});
} else {
$('#cloud_nav').removeClass('fixed_cloud_nav');
$('#cloud_nav').addClass('absolute');
$('#cloud_nav a.active').removeClass('active');
$('#cloud_nav a:first').addClass('active');
}
});
</script>
Fiddle:http://jsfiddle.net/qfaeqo2w/
提前谢谢,问候。
这就是你想要的吗?
http://jsfiddle.net/0ytvjtme/
首先,我改变了计算scrollPoint
的方式,以考虑标头的大小:
scrollPoint = $('section[data-anchor="' + scrollAnchor + '"]').offset().top - $('#cloud_nav').outerHeight();
然后,我们不是减去50个像素,而是添加检测滚动位置的导航高度:
if ($(this).position().top <= scrollPos + $('#cloud_nav').outerHeight())
锚点现在滚动到正确的位置,活动类看起来可以正确切换。
相关文章:
- 为什么Turbolinks不能正常工作?Rails应用程序
- 像Advanced Rest Client这样的Chrome应用可以设置引荐来源网址标头,而网站则不能
- 为什么我不能在 Django Web 应用程序中使用客户端相机拍摄图像快照
- 为什么在Firefox更新之后JQuery不能在我的MVC 4应用程序中工作
- 不能在android中中止MJPEG”;互联网”;应用程序或安卓chrome
- 谷歌应用程序脚本可以作为Web应用程序,但不能作为电子表格脚本
- Requirejs和主干应用程序,不能在IE8中工作
- RubyonRails应用程序不能包含样式表也不能包含js
- jQuery不能在PHP应用程序中运行
- 不能在 AngularJs 混合应用程序上的 youtube api v3 的发布请求中使用访问令牌
- 为什么我的HTML5 / JS应用程序不能在我的iPhone上运行
- 不能在流星应用程序上使用 setTimeout() 的函数
- ASP.NET 应用在VS2010中运行,但在发布/部署后不能运行
- KNOCKOUTJS 不能将绑定多次应用于同一元素
- 为什么我们不能在 setTimeout 上调用和应用
- 如何访问函数创建的HTML元素?这些元素是“;未定义的“;因此不能应用CSS
- HTML5画布不能应用sw滤镜
- Jquery addclass不能应用&;fadeoutdown&;效果
- 数据表不能应用样式
- CSS样式不能应用在AngularJS HTML中