我已经被困在这几个小时了,似乎无法找到问题。我也有描述问题的问题,因为我不确定问题究竟在哪里。我已经遍布stackoverflow和其他网站找到了解决方案,但到目前为止我还没有......
我正在尝试使用jQuery构建一个单页的滚动条。我的问题基本上归结为此。每当我通过在地址栏中键入我页面上另一个元素的ID来查看我的页面并操纵URL片段时,它就会导航到具有ID的元素。但由于我在页面顶部使用固定导航栏,因此它会在固定元素下方显示元素的一部分。
有没有办法通过操纵地址栏来捕获keydown / keyup事件,这样我就能确保段以正确的偏移量显示?有没有办法在更改URL片段后创建默认偏移量?我已经尝试过这个事件' hashchange'在窗口对象上,但当我将location.href.hash值更新为用户正在查看的任何段时,也会触发此操作。我的body元素上有一个默认的顶部偏移量,使初始加载与固定元素一起工作。
似乎很多其他onepage网站都忽略了网址片段而根本没有更新网址,除非导航不在网站的顶部。因此,除非导航位于左侧或右侧,否则您无法直接链接到网站的特定部分。
我的部分代码:
$(window).load(function(){
var segment = window.location.hash;
if(segment != ""){
if($(segment) != []){
var originOfSegment = $(segment).offset().top - 64;
$("body, html").animate({"scrollTop": originOfSegment + "px"}, 0);
}
}
$("a[href*='#']").on("click", function(e){
if(e.preventDefault){
e.preventDefault();
}
else{
e.returnValue = false;
}
var segment = this.hash;
//navigateTo(segment, 500);
window.location.hash = segment;
});
$(window).on("scroll", function(){
var idOfSegment = $(currentSegment).attr("id");
window.location.hash = idOfSegment;
});
});
我可能不是第一个遇到这个问题的人,但我似乎无法找到这个问题的答案。
即使不使用JavaScript来初步计算和设置URL片段引用的元素的偏移量,它也很容易重现。
从用户的角度来看:
答案 0 :(得分:1)
您可以使用JavaScript的window.scrollTo()
或jQuery的.scrollTop()
滚动到特定的位置。一般逻辑是:
.offset().top
.outerHeight()
$(body).scrollTop()
立即滚动到所需位置,或.animate()
在不到一秒的时间内滚动到那里。