JavaScript获取滚动窗口的X/Y位置

JavaScript获取滚动窗口的X/Y位置,javascript,Javascript,我希望找到一种方法来获取当前可查看窗口的位置(相对于总页面宽度/高度),以便使用它强制从一个部分滚动到另一个部分。然而,在猜测哪个对象拥有浏览器的真实X/Y时,似乎有大量的选项 要确保IE 6+、FF 2+和Chrome/Safari正常工作,我需要以下哪一项 window.innerWidth window.innerHeight window.pageXOffset window.pageYOffset document.documentElement.clientWidth documen

我希望找到一种方法来获取当前可查看窗口的位置(相对于总页面宽度/高度),以便使用它强制从一个部分滚动到另一个部分。然而,在猜测哪个对象拥有浏览器的真实X/Y时,似乎有大量的选项

要确保IE 6+、FF 2+和Chrome/Safari正常工作,我需要以下哪一项

window.innerWidth
window.innerHeight
window.pageXOffset
window.pageYOffset
document.documentElement.clientWidth
document.documentElement.clientHeight
document.documentElement.scrollLeft
document.documentElement.scrollTop
document.body.clientWidth
document.body.clientHeight
document.body.scrollLeft
document.body.scrollTop
还有其他的吗?一旦我知道窗口在哪里,我就可以设置一个事件链,它将缓慢地调用
window.scrollBy(x,y)直到它达到我想要的点。

jQuery(v1.10)用于查找该点的方法是:

var doc = document.documentElement;
var left = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);
var top = (window.pageYOffset || doc.scrollTop)  - (doc.clientTop || 0);
即:

  • 它首先测试
    window.pageXOffset
    ,如果存在,则使用它
  • 否则,它将使用
    document.documentElement.scrollLeft
  • 然后减去
    document.documentElement.clientLeft
    (如果存在)
document.documentElement.clientLeft
/
Top
的减法似乎只是为了纠正将边框(不是填充或边距,而是实际边框)应用于根元素的情况,而且可能仅在某些浏览器中才需要

var top  = window.pageYOffset || document.documentElement.scrollTop,
    left = window.pageXOffset || document.documentElement.scrollLeft;

信用证:

使用纯javascript,您可以使用

注释

pageXOffset属性是scrollX属性的别名,而 pageYOffset属性是scrollY属性的别名:

这里是一个快速演示

window.addEventListener(“滚动”),函数(事件){
var top=this.scrollY,
left=this.x;
var horizontalcoll=document.querySelector(“.horizontalcoll”),
verticalScroll=document.querySelector(“.verticalScroll”);
horizontalScroll.innerHTML=“滚动X:+left+”px”;
verticalScroll.innerHTML=“滚动Y:+top+”px”;
},假)
*{框大小:边框框}
:根{高度:200vh;宽度:200vw}
.包装纸{
位置:固定;
顶部:20px;
左:0px;
宽度:320px;
背景:黑色;
颜色:绿色;
高度:64px;
}
.包装部{
显示:内联;
宽度:50%;
浮动:左;
文本对齐:居中;
线高:64px
}
.horizontalScroll{color:orange}

滚动(x,y)至
看我的表演

Thomas——你完全正确。我的错。删除评论。我重新阅读了您的评论,意识到您的解决方案根本不是Jquery解决方案。道歉。改装好了,现在可以用了。我认为他们在webkit中有一个非常临时的bug,他们已经修复了它。我写了一个插件,由于这个错误,插件完全崩溃了,用户向我报告了这一点。非常可怕的是,这些基本的东西可能会崩溃。这是$(window.scrollTop();)的代码吗?在这个答案中也包括jQuery方法可能会很有用。我发布的代码是对后来的
jQuery.fn.offset()
的解释
scrollTop()
/
scrollLeft()
基本相同,但不要减去clientTop/clientLeft。方法是什么?完全跨浏览器安全!最佳解决方案。这比答案代码更有效,但是。。。答案代码不起作用,一点也不……我想知道为什么不使用
document.documentElement.scrollTop
,它可以在任何地方使用。现在,所有这些都是window.scrollY在所有现代浏览器上的别名,除了MSIE(所有版本)。只要MSIE11仍在场景窗口中。在完全删除MSIE之前,pageYOffset可能是最有效的。链接到的页面上写着“为了跨浏览器兼容性,请使用window.pageYOffset而不是window.scrollY。”这不适用于IE。IE需要类似于
window.pageYOffset
window.addEventListener("scroll", function(event) {
    var top = this.scrollY,
        left =this.scrollX;
}, false);
window.pageXOffset == window.scrollX; // always true
window.pageYOffset == window.scrollY; // always true
function FastScrollUp()
{
     window.scroll(0,0)
};

function FastScrollDown()
{
     $i = document.documentElement.scrollHeight ; 
     window.scroll(0,$i)
};
 var step = 20;
 var h,t;
 var y = 0;
function SmoothScrollUp()
{
     h = document.documentElement.scrollHeight;
     y += step;
     window.scrollBy(0, -step)
     if(y >= h )
       {clearTimeout(t); y = 0; return;}
     t = setTimeout(function(){SmoothScrollUp()},20);

};


function SmoothScrollDown()
{
     h = document.documentElement.scrollHeight;
     y += step;
     window.scrollBy(0, step)
     if(y >= h )
       {clearTimeout(t); y = 0; return;}
     t = setTimeout(function(){SmoothScrollDown()},20);

}