我正在尝试创建一个活动菜单,当用户滚动并传递相应的id时,将CSS类.active
插入到每个列表项中。我在JSFiddle中对此进行了测试,因此我知道我的代码是可靠的,但它对我正在开发的网站没有任何影响:
http://dev.celebrate-life.com/
这是jQuery:
(function($) {
// Selectors
var lastId,
topMenu = $("#menu-mainmenu"),
topMenuHeight = topMenu.outerHeight()+15,
// All list items
menuItems = topMenu.find("a"),
// Anchors corresponding to menu items
scrollItems = menuItems.map(function(){
var item = $($(this).attr("href"));
if (item.length) { return item; }
});
// Bind click handler to list items
menuItems.click(function(e){
var href = $(this).attr("href"),
offsetTop = href === "#" ? 0 : $(href).offset().top-topMenuHeight+1;
$('html, body').stop().animate({
scrollTop: offsetTop
}, 300);
e.preventDefault();
});
// Bind to scroll
$(window).scroll(function(){
// Get container scroll position
var fromTop = $(this).scrollTop()+topMenuHeight;
// Get id of current scroll item
var cur = scrollItems.map(function(){
if ($(this).offset().top < fromTop)
return this;
});
// Get the id of the current element
cur = cur[cur.length-1];
var id = cur && cur.length ? cur[0].id : "";
if (lastId !== id) {
lastId = id;
// Set/remove active class
menuItems
.parent().removeClass("active")
.end().filter("[href=#"+id+"]").parent().addClass("active");
}
});
})(jQuery);
这是我的菜单结构:
<ul id="menu-mainmenu" class="x-nav">
<li>
<a href="#id">List Item</a>
</li>
</ul>
当“活动”类应用于列表项时,我有CSS,但在我解决首先将类应用于<li>
的问题之前,它并不真正相关。
为什么这不起作用?