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

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

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

Link

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

这是我的function:

//平滑滚动

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

你可以尝试做:

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

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

试试这个:

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

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

这是我的代码

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

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

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

仅在铬上测试过