Team:NCTU Formosa/source/head
From 2013.igem.org
(Difference between revisions)
Line 52: | Line 52: | ||
}; | }; | ||
$('#toc').followTo(441); | $('#toc').followTo(441); | ||
+ | }); | ||
+ | $(window).load(function(){ | ||
// Cache selectors | // Cache selectors | ||
var lastId, | var lastId, | ||
topMenu = $("#toc"), | topMenu = $("#toc"), | ||
- | topMenuHeight = | + | topMenuHeight = topMenu.outerHeight()+15, |
// All list items | // All list items | ||
menuItems = topMenu.find("a"), | menuItems = topMenu.find("a"), | ||
Line 62: | Line 64: | ||
var item = $($(this).attr("href")); | var item = $($(this).attr("href")); | ||
if (item.length) { return item; } | if (item.length) { return item; } | ||
- | }); | + | }), |
+ | noScrollAction = false; | ||
// Bind click handler to menu items | // Bind click handler to menu items | ||
// so we can get a fancy scroll animation | // so we can get a fancy scroll animation | ||
menuItems.click(function(e){ | menuItems.click(function(e){ | ||
- | + | var href = $(this).attr("href"), | |
- | + | offsetTop = href === "#" ? 0 : $(href).offset().top-topMenuHeight+1; | |
- | + | noScrollAction = true; | |
- | + | $('html, body').stop().animate({ | |
- | + | scrollTop: offsetTop | |
- | + | },{ | |
+ | duration: 300, | ||
+ | complete: function() { | ||
+ | menuItems | ||
+ | .parent().removeClass("active") | ||
+ | .end().filter("[href=" + href +"]").parent().addClass("active"); | ||
+ | setTimeout(function(){ noScrollAction = false; }, 10); | ||
+ | } | ||
+ | }); | ||
+ | e.preventDefault(); | ||
}); | }); | ||
// Bind to scroll | // Bind to scroll | ||
$(window).scroll(function(){ | $(window).scroll(function(){ | ||
- | // Get container scroll position | + | if(!noScrollAction){ |
- | + | // 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("selected") | |
- | } | + | .end().filter("[href=#"+id+"]").parent().addClass("selected"); |
+ | } | ||
+ | } | ||
}); | }); | ||
}); | }); | ||
</script> | </script> |
Revision as of 19:23, 29 August 2013