0

单击锚点时,我想进行平滑滚动,但首先我想检查锚链接是否链接到id. 如果只有散列,则不要滚动。

喜欢:

<a href="#">do not scroll</a>

<a href="#anyID">Yes do the scroll</a>

我当前的代码在单击每个刚刚散列的锚点时滚动。

请修复我的代码,以便在锚点刚刚散列时它不会滚动

$('a[href^="#"]').click(function (e) {
    e.preventDefault();
    var target = this.hash;

    if (typeof($(target).offset()) != 'undefined') {
        $('html, body').animate({
            scrollTop: $(target).offset().top - 60
        }, 1000);
    }
});
4

3 回答 3

3

尝试

$('a[href^="#"]').click(function (e) {
    e.preventDefault();
    var target = $(this.href);

    if (target.length && target.is(':visible')) {
        $('html, body').animate({
            scrollTop: $(target).offset().top - 60
        }, 1000);
    }
});
于 2013-08-10T14:54:18.200 回答
2

如果您确定每个锚点都存在一个不仅包含哈希的元素,那么您可以将选择器更改为:

$('a[href^="#"][href!="#"]')

不过,显式测试元素的存在也很好。

于 2013-08-10T14:56:17.127 回答
1
$('a').click(function(){
 var href=$(this).attr('href');
 if(href!="#"){
  $('html, body').animate({
   scrollTop: $(href).offset().top - 60
  }, 1000);
 }
});
于 2013-08-10T15:16:48.223 回答