#section1
外部リンクを介してアクセスしているときと内部を介してアクセスしているときの両方で同じことを行うようにコードを一般化したい場合は、イベント<a href="#section1">Section 1</a>
を聞くことができます。hashchange
スクロール中は更新されませんが、コードを一般化して再利用できるようにすれば、テクニックを簡単に組み合わせることができると確信しています。
Ben AlmanのjQueryhashchangeイベントプラグインを試して、同じ関数を呼び出すコールバックを追加してください。jQuery urlInternal:URLの内部、外部、またはフラグメント性を簡単にテストし、おそらくjQuery BBQ:戻るボタンとクエリライブラリ(これもBen Almanによる)と一緒に使用することをお勧めします。
これは、タブ行のさまざまなタブをアクティブ化するために同じ方法で使用するプロジェクトからすばやく適合させたコードです。(私は上記の3つのプラグインをすべて使用していますが、このスニペットにすべてのプラグインが必要だったかどうかは覚えていません。)
(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(...)
、スクロール用のプラグインがあるため、クリックイベントをキャンセルする場合を除いて、質問にあるハンドラーを使用する必要はありません。