这是我的HTML:
<ul class="nav-list">
<li class="current"><a class="smoothscroll" href="#home" title="">Home</a></li>
<li><a class="smoothscroll" href="signup.html" title="">Sign up</a></li>
<li><a class="smoothscroll" href="signin.html" title="">Sign in</a></li>
</ul>
这是我的JavaScript:
var ssSmoothScroll = function() {
$('.smoothscroll').on('click', function (e) {
var target = this.hash,
$target = $(target);
e.preventDefault();
e.stopPropagation();
$('html, body').stop().animate({
'scrollTop': $target.offset().top
}, cfg.scrollDuration, 'swing').promise().done(function () {
// check if menu is open
if ($('body').hasClass('menu-is-open')) {
$('#header-menu-trigger').trigger('click');
}
window.location.hash = target;
});
});
};
我搜索了几个答案,仍然无法找到我的工作原因。非常感谢任何帮助。
我想继续使用signup.html或signin.html,但如果单击它们,这两个链接都不起作用。它们只有在我右键单击并在新选项卡中打开时才有效。
答案 0 :(得分:1)
offset
返回undefined
的唯一原因是你在一个空的jQuery集上调用它。这告诉我们$(target)
返回一个空的jQuery集,大概是因为target
包含一个与任何元素都不匹配的选择器。
您可能希望添加一个警卫以允许:
if (!$target.length) {
return;
}
...就在$target = ...
之后。
查看您的HTML:您可能只想从将您带到另一个页面的链接中移除smoothscroll
类(在您的示例中为后两个)。他们似乎唯一的目的是跳转到页面滚动中的锚点而不是跳转。由于这些链接是在页面外的,我首先不会把它放在它们上面。