-1

当有人访问锚链接时,我正在尝试制作滚动动画,如下所示:

www.miweb.com/section/#anchorLink

我正在使用此代码执行此操作,但其中有问题,因为在用户访问没有锚 ID的 URL 的情况下,我无法在它之后执行任何其他操作(在这种情况下为 alert("the end")) 。

$('html, body').animate({
    scrollTop:$('[name="'+window.location.hash.replace("#", "")+'"]').offset().top
}, 500);

alert("the end");

如果用户从带有锚 ID 的 URL 访问,它将被执行。

在任何情况下,我该怎么做才能在这个函数之后执行代码?

谢谢。

4

1 回答 1

3

如果您想要在动画之后执行代码,请执行以下操作:

$('html, body').animate({
    scrollTop:$('[name="'+window.location.hash.replace("#", "")+'"]').offset().top
}, 500, function() {
    alert("the end");
});

更新
在 OP 的评论之后,我认为当 offset() 为 null 时访问 top 属性时出现 javascript 错误(当没有锚时就是这种情况),所以你要防止访问可能的 null 引用,如下所示:

dest = $('[name="'+window.location.hash.replace("#", "")+'"]').offset();
dtop = dest != null ? dest.top : null;
$('html, body').animate({
    scrollTop: dtop
}, 500);

alert("the end");​

现在alert()应该打印得很好。

如果您查看浏览器 javascript 控制台,您以后可以很容易地发现类似的错误,我刚刚这样做并看到了有关空引用的错误。

于 2012-10-04T13:43:18.530 回答