3

我有一个带有固定标题的页面,我想要一个 url,比如http://example.com#foo滚动到元素id=foo并减去标题的高度,以便元素可见。

我尝试了以下方法,但至少在 Chrome 中,此代码在默认文档片段滚动发生之前运行,因此滚动位置被覆盖:

$(function() {
  var offset;
  if (window.location.hash !== "") {
     offset = $(window.location.hash).offset().top;
     return $("body").scrollTop(offset - headerHeight);
  }
});

这是问题的一个jsfiddle http://jsfiddle.net/rk8y7/1/

4

1 回答 1

0

我可以通过将idDOM 元素的 更改为当前的 id +_section然后侦听一个hashchange事件来设置页面的滚动位置来使其工作。我还必须在页面加载时触发hashchange以使其在第一页加载时工作。

$(function() {
  $(window).on('hashchange', function() {
    var elemId, headerHeight, offset;
    elemId = window.location.hash + "_section";
    if (window.location.hash !== "" && $(elemId).length) {
      headerHeight = $('header').height();
      offset = $(elemId).offset().top;
      return $("html, body").scrollTop(offset - headerHeight);
    }
  });
  $(window).trigger('hashchange');
});

这是我的小提琴http://jsfiddle.net/sguha095/rk8y7/4/

于 2013-06-13T21:54:41.573 回答