#section1
如果您想在通过外部链接和内部访问时概括代码以执行相同的操作<a href="#section1">Section 1</a>
,您可以监听hashchange
事件。虽然它不会在滚动时更新,但如果您概括代码并使其可重用,我相信组合这些技术很容易。
试试Ben Alman 的 jQuery hashchange 事件插件并添加一个调用相同函数的回调。您可能希望将它与jQuery urlInternal 一起使用:轻松测试 URL 内部、外部或片段性,也许还有jQuery BBQ:返回按钮和查询库,同样由 Ben Alman 编写。
这是一些代码,快速改编自一个项目,我以相同的方式使用它来激活选项卡行中的不同选项卡。(我使用了上面提到的所有三个插件,但我不记得是否所有这些插件都是这个片段所必需的。)
(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(...)
问题中的处理程序,除非可能取消单击事件,因为您有滚动插件。