2013-05-11 67 views
0

我寫了一個使用jQuery的平滑滾動函數。 但有一個問題,jQuery平滑滾動,只做錨鏈接是一個id

如果錨只有在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);  
}); 

回答

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); 
      } 
     } 
    }); 
}); 

你應該給你想要的錨特定的類,而不是針對上面的每個錨點。

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); 
    } 
}); 
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); 
    } 
}); 
0

只是分享我的單線最小的解決方案:

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

只對鉻

測試