【发布时间】:2014-06-17 09:52:47
【问题描述】:
我想用 jQuery 实现平滑滚动到锚点。我找到了一些解决方案,但是,它们都是基于指向锚点的链接看起来像这样的事实:
<a href="#anchor-id">TEST</a>
在我的场景中,链接如下所示:
<a href="some-page#anchor-id">TEST</a>
我有一个全局导航栏,其中包含指向“某些页面”的链接,悬停菜单条目会打开一个下拉菜单,其中包含指向该页面上锚点的链接。
我在网上找到了以下适用于常规锚链接<a href="#...">的脚本:
$('a[href^="#"]').bind('click.smoothscroll', function (e) {
e.preventDefault();
var target = this.hash,
$target = $(target);
$('html, body').stop().animate({
'scrollTop': $taeget.offset().top-60
}, 4000, 'swing', function () {
window.location.hash = target;
});
});
小提琴的链接:http://jsfiddle.net/2nT8M/5/
小提琴似乎不起作用,但是代码在我的网站上确实有效...
我的问题:
- 如何让脚本正常工作(显然)?
- 是否可以根据我的场景的需要使用不仅包含锚点 ID 的链接?
【问题讨论】:
-
究竟是什么不工作?如果我单击您的 TEST 锚,它会向下滚动到 ANCHOR 元素,就像小提琴中的预期一样。除了您的 $('a[href^="#"]'
-
谢谢,错字破坏了小提琴中的代码......现在它正在工作。但是,如果我将脚本与这种类型的链接
<a href="sample-page#anchor">一起使用,则它不起作用。它只适用于#anchor...我怎样才能让它适用于较长的链接? -
jsfiddle.net/2nT8M/6 这只是短链接的平滑滚动示例。对于更长的,你必须从你的href中获取#anchor-id,例如: var target = $( $(this).attr('href') );之后:target = '#' + target.split('#')[1]
-
嘿,你能写成代码吗?我不明白它属于什么......