如果你想推廣你的代碼做同樣的事情都當你參觀#section1
通過e xternal鏈接,並且內部通過<a href="#section1">Section 1</a>
,您可以收聽hashchange
事件。它在滾動時不會更新,但如果您將代碼概括化並使其可重用,我相信將這些技術結合起來很容易。
嘗試Ben Alman's jQuery hashchange event plugin並添加一個調用相同函數的回調函數。你也許想和jQuery urlInternal: Easily test URL internal-, external-, or fragment-ness一起使用它,也許還要使用Ben Alman的jQuery BBQ: Back Button & Query Library。
下面是一些代碼,可以從項目中快速調整,以相同的方式使用它來激活選項卡中的不同選項卡。 (我用上面提到的所有三個插件,但我不記得,如果所有的人都對這個片段是必要的。)
(function() {
var menuLinksSelector = "#menu-main-menu a",
menuLinkHighlightClass = "current";
$.fn.extend({
filterLinksToFragment: function(fragment) {
var $this = $(this),
$filtered = $this.filter("a:urlFragment").filter(function() {
var $this = $(this),
thisFragment = $.param.fragment($this.attr('href'));
return (thisFragment === fragment);
});
return $filtered;
}
});
function highlightMenuItem(fragment) {
var $menuLinks = $(menuLinksSelector),
$selectedMenuLink = $menuLinks.filterLinksToFragment(fragment);
$menuLinks.removeClass(menuLinkHighlightClass);
$menuItem.addClass(menuLinkHighlightClass);
}
function highlightCurrentMenuItem() {
var currentFragment = $.param.fragment();
if (currentFragment !== undefined && currentFragment !== "") {
highlightMenuItem(currentFragment);
}
}
$window.on('hashchange', function() {
// Activate the current URL's #part-anything link
highlightCurrentMenuItem();
});
// Trigger the event (useful on page load).
$window.hashchange();
}());
如果您使用此代碼,您將不再需要使用.click(...)
處理程序中在你的問題中,除了可能取消點擊事件,因爲你有滾動插件。
謝謝喬爾!然而,我的#anchor導航運行良好,所以理想情況下我只想使用基於滾動位置突出顯示菜單項的腳本,而不是URL中的散列。我已經修改了我的問題,希望能夠讓這個更清楚。 –