1

我使用此功能滚动到所需的容器:

function scrolear(destino){
    var stop = $(destino).offset().top;
    var delay = 1000;
    $('body').animate({scrollTop: stop+'px'}, delay);
    return true;
}

当这样使用时,问题就来了:

<a href="#" onclick="scrolear('#container');">go</a>

因为href="#"使正文滚动到页面顶部。

有没有办法防止这种情况?

4

4 回答 4

2

更新

考虑使用 javascript 来逐步增强您的网站,而不是依赖它来使网站正常运行。在您的示例中,这可以通过以下方式实现:

HTML:

<a href="#container">go</a>

Javascript:

$(function() {
  $('a[href^="#"]').click(function(e) {
    e.preventDefault();
    var target = $(this).attr('href');
    var stop = $(target).offset().top;
    var delay = 1000;
    $('body').animate({scrollTop: stop + 'px'}, delay);
  });
});

这将拦截对 href 以 # 开头的所有链接的点击,并为您添加动画。如果用户没有启用 javascript,单击该链接仍会将他们带到正确的位置。

希望这可以帮助!

于 2011-11-15T11:48:48.370 回答
1

因为你使用 jquery 我会做

<a href="#">go</a>

$("a").click(function() {
    e.preventDefault(); // cancel's the '#' click event
    scrolear('#container');
});
于 2011-11-15T11:50:21.333 回答
1
<a href="javascript:void(0);" onclick="scrolear('#container');">go</a>

这只会为 href 分配一个 javascript 函数,它什么都不做,所以不会像使用#

于 2011-11-15T11:52:47.743 回答
0

来自@rich.okelly 的更正答案

function scrollTosec(){
     $('a[href^="#"]').click(function(e) {
            e.preventDefault();
            var target = $(this).attr('href');
            var stop = $(target).offset().top;
            var delay = 200;
            $('body').animate({scrollTop: stop + 'px'}, delay);
          });
}
于 2013-11-14T19:27:19.780 回答