0

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

4 に答える 4

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);
    }
});
于 2013-05-11T10:52:18.557 に答える
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);
            }  
        }
    });
});  

上記のようにすべてのアンカーをターゲットにするのではなく、目的のアンカーに特定のクラスを与える必要があります。

于 2013-05-11T10:46:12.233 に答える
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);
    }
});
于 2013-05-11T11:18:51.230 に答える
0

私の単一行の最小限のソリューションを共有するためだけに:

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

クロムでのみテスト

于 2013-08-20T08:27:38.043 に答える