我想将网址更改为当前滚动到的网址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>
非常感谢任何帮助。
非常感谢。
答案 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'));
}
});
});