滚动经过时使菜单类处于活动状态
Making a menu class active when scrolled past
注意:使用引导
当锚点距离屏幕顶部50像素时,我想为菜单项分配"活动"类。这意味着我需要取消分配js中的活动类,并分配一个新类。
这是我的菜单
<nav class="navbar navbar-default" data-spy="affix" data-offset-top="34">
<div class="container">
<div class="navbar-collapse collapse navbar-responsive-collapse" id="main-menu">
<ul class="nav navbar-nav">
<li id="whatbutton"><a href="#whatissm">What We Are</a></li>
<li id="whybutton"><a href="#whyusesm">Why Us</a></li>
<li id="offerbutton"><a href="#whatdoessmoffer">What We Offer</a></li>
<li id="contactbutton"><a href="#contactus">Contact Us</a></li>
</ul>
<ul class="nav navbar-nav pull-right">
<li><a href="#">Right Link</a></li>
</ul>
</div>
</div>
</nav>
这些是我h1的
<h1 id="whatissm" name="whatissm"><span>sometexthere</span></h1>
<h1 id="whyusesm" name="whyusesm"><span>somtexthere</span></h1>
<h1 id="whatdoessmoffer" name="whatdoessmoffer"><span>sometexthere</span></h1>
<h1 id="contactus" name="contactus"><span>Contact Us</span></h1>
现在这是我开始挣扎的地方。。。
从早期的帖子中,我知道我的js应该看起来像这个
<script>
//smooth scrolling
$(function() {
$('[data-toggle="popover"]').popover();
$('[title]').tooltip({container: 'body'});
});
$('a').click(function() {
var reduce = 150;
$('html, body').animate({
scrollTop: $('[name="' + $.attr(this, 'href').substr(1) + '"]').offset().top - reduce
}, 500);
return false;
});
//Making class active by scrolling past it
$(window).scroll(function(){
var scrollTop = $(document).scrollTop();
var anchors = $('body').find('.anchor');
for (var i = 0; i < anchors.length; i++){
if (scrollTop > $(anchors[i]).offset().top - 50 && scrollTop < $(anchors[i]).offset().top + $(anchors[i]).height() - 50) {
$(anchors[i]).addClass('active');
} else {
$(anchors[i]).removeClass('active');
}
}
});
</script>
但不幸的是,这段代码对我来说不起作用。1)它没有取消分配活动类2)它就是不起作用了。
编辑:与此类似http://getbootstrap.com/css/(当您滚动右侧菜单中的活动类时发生变化)
第2版:添加了我的向下滚动活动效果代码。。。我对js还很陌生,所以我可能在某种程度上实现错了。
编辑:了解实际问题:
$(window).scroll(function(){
var scrollTop = $(document).scrollTop();
var anchors = $('body').find('h1');
for (var i = 0; i < anchors.length; i++){
if (scrollTop > $(anchors[i]).offset().top - 50 && scrollTop < $(anchors[i]).offset().top + $(anchors[i]).height() - 50) {
$('nav ul li a[href="#' + $(anchors[i]).attr('id') + '"]').addClass('active');
} else {
$('nav ul li a[href="#' + $(anchors[i]).attr('id') + '"]').removeClass('active');
}
}
});
相同的技术;检查每个h1元素是否都在元素顶部位置下方和元素底部位置上方。如果为true,则获取元素的id并选择corrosconding导航项并向其添加活动类。
更新的小提琴:http://jsfiddle.net/yrz54fqm/1/
旧答案
下面的代码应该会给你寻找的结果
$(window).scroll(function(){
var scrollTop = $(document).scrollTop();
var anchors = $('body').find('.anchor');
for (var i = 0; i < anchors.length; i++){
if (scrollTop > $(anchors[i]).offset().top - 50 && scrollTop < $(anchors[i]).offset().top + $(anchors[i]).height() - 50) {
$(anchors[i]).addClass('active');
} else {
$(anchors[i]).removeClass('active');
}
}
});
您需要监听窗口上的滚动事件,并检查您的每个元素是否都在元素顶部位置下方和元素底部位置上方。
将第3行的var anchors = $('body').find('.anchor');
替换为您所处情况下的锚点类名。这里还有一个HTML和CSS:http://jsfiddle.net/yrz54fqm/
希望有帮助:)
/**
*
* @param {Element} - element 1 that used to get offset when scrolling
* @param {Element} - activated when passing element 1
* @param {String} - class name to add to element 2 when element 1 is passed
*/
this.ScrollBetween = function(targetElement, pElement, className) {
$(window).scroll(function() {
var scrollTop = $(window).scrollTop(),
targetOffsetTop = $(targetElement).offset().top,
targetHeight = $(targetElement).height();
(scrollTop > targetOffsetTop - 50 && scrollTop < targetOffsetTop + targetHeight - 50 ? $(pElement).addClass(className) : $(pElement).removeClass(className));
});
};
使函数更易于理解。现在它被用于JQuery对象,但可以通过将其更改为来简单地更改为常规函数
function ScrollBetween(targetElement, pElement, className){
.............
}
可由调用
ScrollBetween($("#section-1"), $("li-1"), "active");
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 如果其中一个子菜单项处于活动状态,则展开下拉菜单
- 当子菜单的父级或包含链接处于活动状态时,如何告知子菜单可见
- Jquery 无法返回到动画菜单列表上的活动状态
- JavaScript 下拉菜单在单击时处于活动状态,在外部单击时不活动
- 如果菜单处于活动状态或非活动状态,则切换图标的类.多级按钮菜单
- 当用户单击子菜单并在新页面中打开时,子菜单将保持活动状态
- 活动状态菜单 JavaScript
- 折叠菜单中的活动状态
- javascript菜单悬停处于活动状态
- 滚动经过时使菜单类处于活动状态
- 向jQuery滚动条/侧菜单添加当前/活动状态
- 在车把部分中设置导航菜单项为活动状态
- 当子菜单处于活动状态时,将类添加到父级li
- 在下拉菜单中获取要切换为活动状态的图像
- 崩溃引导3多层子菜单&打开子菜单时更改活动状态
- 当子菜单处于活动状态或悬停状态时,保持锚点悬停状态
- 引导导航条子菜单活动状态不工作
- 切换菜单处于活动状态
- 如何防止折叠菜单在页面处于活动状态时关闭