2013-05-11 66 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})}) 

只对铬

测试