错误Scrolltop:top未定义

时间:2015-11-25 08:00:45

标签: javascript jquery

我收到以下错误

  

未捕获的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");
  }
});

1 个答案:

答案 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() {});