我收到以下错误
未捕获的TypeError:无法读取未定义的属性“top”。
它正在讨论排在第top
行的$(html, body).. , 1000, function
,但我真的不知道如何修复此错误。我已经尝试过多个其他帖子但问题相当类似,但到目前为止,他们都没有解决我的问题。
// Menu Scroll to content and Active menu
var lastId,
topMenu = $("#menu"),
topMenuHeight = topMenu.outerHeight() + 145,
menuItems = topMenu.find("a"),
scrollItems = menuItems.map(function() {
var item = $($(this).attr("href"));
if (item.length) {
return item;
}
});
$('a[href*=#]').bind('click', function(e) {
e.preventDefault();
var target = $(this).attr("href");
$('html, body').stop().animate({
scrollTop: $(target).offset().top - 60
}, 1000, function() {});
return false;
});
$(window).scroll(function() {
var fromTop = $(this).scrollTop() + topMenuHeight;
var cur = scrollItems.map(function() {
if ($(this).offset().top < fromTop)
return this;
});
cur = cur[cur.length - 1];
var id = cur && cur.length ? cur[0].id : "";
if (lastId !== id) {
lastId = id;
menuItems
.parent().removeClass("active")
.end().filter("[href=#" + id + "]").parent().addClass("active");
}
});
答案 0 :(得分:3)
您正试图从offset
获取.attr('href')
。
尝试删除.attr('href');
。
var target = $(this);
$('html, body').stop().animate({ scrollTop: $(target).offset().top -60 }, 1000, function() {
});
或强>
由于您的选择器有$('a[href*=#]')
,因此href可能只包含#id
而不仅仅/foo/bar#id
。因此,尝试: -
var target = $(this).attr("href").split('#')[1];
$('html, body').stop().animate({
scrollTop: $('#' + target).offset().top - 60
}, 1000, function() {});