更改URL中断滚动

时间:2015-02-12 21:38:24

标签: javascript jquery

我想将网址更改为当前滚动到的网址ID的网址。但是我的下面的代码只是打破了滚动(它根本不滚动)。

$(document).scroll(function() {
  $('section').each(function(){
    if ($(this).offset().top) {
      window.location.hash = $(this).attr('id');
    }
  });
});

<section id="a"></section>
<br><br><br><br><br><br><br>
<section id="b"></section>
<br><br><br><br><br><br><br>
<section id="c"></section>
<br><br><br><br><br><br><br>
<section id="d"></section>

非常感谢任何帮助。

非常感谢。

1 个答案:

答案 0 :(得分:2)

对于除第一个之外的所有section,此行返回true:

if ($(this).offset().top)

相反,您可以将每个section的偏移量与窗口的滚动位置进行比较:

if($(this).offset().top < $(window).scrollTop())

此行重新加载页面,始终滚动到上一个section(基于您当前的if):

window.location.hash = $(this).attr('id');

这就是看起来滚动被打破的原因。

如果您想在不重新加载页面的情况下更改网址,请使用 history.pushState()

完整代码:

$(document).scroll(function() {
  $('section').each(function() {
    if($(this).offset().top < $(window).scrollTop()) {
      history.pushState({}, '', '#'+$(this).attr('id'));
    }
  });
});