jQuery平滑滚动,仅当锚链接是id时才执行

时间:2013-05-11 10:34:28

标签: jquery

我使用jQuery编写了一个平滑的滚动函数。 但是有一个问题,

如果锚只有href中的哈希值,那么它会返回未定义的错误。 喜欢:

<a href="#" title="something">Link</a>

请告诉我如何仅在锚链接是ID时运行我的函数,而不是仅仅哈希。

这是我的功能:

//平滑滚动

jQuery('a[href^="#"]').click(function (e) {    
        e.preventDefault();
        var target = this.hash;
        jQuery('html, body').animate({ 
                  scrollTop: (jQuery(target).offset().top) - 60 
                }, 1000);    
});

4 个答案:

答案 0 :(得分:4)

试试这个:

jQuery('a').click(function (e) {
    e.preventDefault();
    var target = this.hash;
    if (this.href != '#') {
        jQuery('html, body').animate({
            scrollTop: jQuery(target).offset().top - 60
        }, 1000);
    }
});

答案 1 :(得分:3)

您可以尝试:

jQuery('a').each( function() {
    var $this = jQuery(this), 
        target = this.hash;
    jQuery(this).click(function (e) { 
        e.preventDefault();
        if( $this.length > 0 ) {
            if($this.attr('href') == '#' ) {
                // Do nothing   
            } else {
               jQuery('html, body').animate({ 
                    scrollTop: (jQuery(target).offset().top) - 60 
                }, 1000);
            }  
        }
    });
});  

你应该给你想要的锚定一个特定的类,而不是像上面那样定位每个锚点。

答案 2 :(得分:0)

我得到了问题的小解决方案, 只需检查目标是否未定义,如果是,则不要运行它。

这是我的代码

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

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

答案 3 :(得分:0)

只是为了分享我的单行最小解决方案:

$('a[href^="#"]').click(function(e){e.preventDefault();var o=$(this.hash).offset();if(o)$('body').animate({scrollTop:o.top})})

仅在Chrome上测试