我使用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);
});
答案 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上测试