首先,让我指出,我已经用Google搜索,甚至在这里查看this和this的答案,但是,我仍然没有为我的案例找到一个有效的解决方案。
我设计了一个页面,其中有几个固定元素覆盖页面,并使html5 / css3在主文档上创建一个干净的“掩码”,从而允许主体滚动条仍然滚动底层内容。
在firefox和ie(bleh)中,scrollTop(0)工作正常。但是,正如问题所述,在我喜欢的浏览器中并没有那么多。
我记下的一件事是在scrollTo事件之前和之后调用以下内容
$("body,html,document").each(function(){ console.log($(this).scrollTop()); });
结果并不令人满意,它告诉我,scrolltop已经是0,因此甚至没有尝试使用scrollTop,或者至少那是我迄今为止“想到的”。
在你问之前,我在这3个项目中的每个项目都进行了控制台调用,因为文档scrolltop应该被覆盖在其中一个项目中(我会想到身体,但是就像你必须调用html一样)
任何关于想法的人?
仅供参考,这可能是一个奇怪的问题(在IE中它是如何工作的而不是我真的无法理解的铬)但我已经尝试了以下结果:
$(window).scrollTop(0);
$(document).scrollTop(0);
$("html").scrollTop(0);
$("body").scrollTop(0);
window.scroll(0,0);
$("body,html,document").scrollTop(0);
$("body,html").scrollTop(0);
我想这扩展了我的问题,这是一个CSS问题吗?我没有外部链接,代码太长(用CI视图Partials制作)发布所有内容,但要澄清我做了什么:
临时小提琴不再起来
问题出在CSS上。特别是我在下面列出的规则。
html, body {
overflow-x: hidden;
overflow-y: auto;
}
虽然这些规则显然与滚动条有关,但我不确定它们为什么会导致您正在观察的行为。但如果你删除它们,它应该解决你的问题。
(function () {
var down = false, downX, downY;
document.onmousedown = function (e) {
downX = e.pageX;
downY = e.pageY;
down = true;
};
document.onmouseup = function () { down = false; };
document.onmousemove = function (e) {
if (down) {
window.scrollTo(
window.scrollX + downX - e.pageX,
window.scrollY + downY - e.pageY
);
}
};
})();
也应该这样做。
我在MacOS上遇到过这个问题。我试图把:
overflow: hidden
在html
,它仍然无法正常工作。
然后我尝试使用一些技巧:
body
它工作正常!固定位置将jQuery API docs与overflow: hidden
分离,有效地将窗口滚动位置设置为零。然后延迟200毫秒(只是为了更安全的一面),我把$('#element-id').prop('scrollTop', 0);
放回去了。
我希望这有帮助。谢谢。
我有同样的问题。如果我放
$(window).scrollTop(0);
在文档就绪处理程序中,它没有工作;但如果我在Chrome开发者工具包的javascript控制台面板中测试它,它就可以了!唯一的区别是脚本的执行时间。所以我试过了
window.setTimeout(function() {
$(window).scrollTop(0);
}, 0);
它起作用了。设置延迟大于0是不必要的,尽管这也有效。这不是jQuery的错,因为它是一样的
window.scrollTo(0, 0); window.scroll(0, 0);
所以原因可能是浏览器在呈现页面并执行js后填充window.pageYOffset属性。
对于需要溢出设置的人来说,解决方法是使用这样的动画。
$('#element_id').stop().animate({ scrollTop: 0 }, 500);
这似乎比.scrollTop(0)
更好。
我刚刚在IE8和Chrome中测试了以下内容,两者都有效:
$(window).scrollTop(0)
还看看这个答案:scrolltop broken on android - 当溢出设置为可见并且位置相对时它似乎效果最好 - 但是ymmv。您可能会发现这些有用......
function repeatMeOnMouseDown() // for smooth scrolling
{
var $newTop = $('#element_id').position().top + ($goingUp ? -20 : 20);
$('#element_id').animate({top: $newTop}, 20, repeatMeOnMouseDown);
}
// these should work
$('#element_id').animate({top: -200}, 200); // scroll down
$('#element_id').animate({top: 0}, 200); // scroll back up
// DON'T DO THIS - Offsets don't work with top like they do with scrollTop
$('#element_id').animate({top: ("-= " + 200)}, 200);
// and when you get tired of fighting to do smooth animation
// on different browsers (some buggy!), just use css and move on
function singleClick($goingUp)
{
var $newTop = $('#element_id').position().top + ($goingUp ? -200 : 200);
$('#element_id').css({top: $newTop}, 20);
}
仅供参考,如果不是在顶层,即在iframe中,只需尝试window.top.scrollTo(0,0);
我在qazxsw poi中滚动时遇到了同样的问题。理由是在qazxsw poi和chrome
中的qazxsw poi风格。 height:100%
此代码在chrome中测试过。 body
html
这是正常的行为,当你在css中宣布qazxsw poi为qazxsw poi或qazxsw poi dom元素时,你可以在See this answer中读到:
垂直滚动位置与可滚动区域上方的视图中隐藏的像素数相同。如果滚动条位于最顶部,或者元素不可滚动,则此数字将为0。
使用http://jsfiddle.net/wmo3o5m8/1/滚动条不可见因此元素不可滚动,因此在您将使用的每个(我不知道)浏览器中数字将为0。