Javascript 是否包装文档或窗口对象以检查滚动值?

Javascript 是否包装文档或窗口对象以检查滚动值?,javascript,jquery,scroll,window,document,Javascript,Jquery,Scroll,Window,Document,要检查页面的滚动值,我使用jQuery包装窗口对象,但滚动时,滚动事件的目标元素将显示为文档对象: $(window).scroll(function(e) { alert('Scrolling ' + e.target); }); 检查滚动值的正确对象是什么? 我知道它们之间的区别(一个窗口可以包含多个帧,因此包含许多文档),但对于单个文档上下文,我看到滚动值一致: alert($(window).scrollTop() === $(document).scrollTop());

要检查页面的滚动值,我使用jQuery包装
窗口
对象,但滚动时,滚动事件的目标元素将显示为
文档
对象:

$(window).scroll(function(e) {
    alert('Scrolling ' + e.target);
});
检查滚动值的正确对象是什么?
我知道它们之间的区别(一个窗口可以包含多个帧,因此包含许多文档),但对于单个文档上下文,我看到滚动值一致:

alert($(window).scrollTop() === $(document).scrollTop());
编辑:

本机JavaScript也会发生这种情况:

window.onscroll = function(e) { alert('scrolled ' + e.target); };
元素绑定为
窗口
,但事件目标为
文档


关于上面写的表达式,比较
窗口
对象的滚动顶值与
文档
对象的滚动顶值:jQuery文档说明
$(窗口).width()
返回视口的宽度,而
$(文档).width()
返回HTML DOM元素的宽度;由于视口可能小于整个HTML元素宽度,这两个值可能不同。

将jQuery放在一边,使用纯JavaScript可以检查当前垂直滚动位置的
窗口的以下属性:

window.pageYOffset;
window.scrollY; 

第二个不是跨浏览器。尽管如此,在IEF上,在包含不同帧的窗口中,每个帧都有自己的文档,因此此表达式始终为真:
window.frames[0].document!==frames[1]。文档。我从同一个窗口对象访问了这些文档,这就是我的意思。好的,这就是我要说的。也许我不明白你的问题?基本上,在请求
时,从jQuery中选择
窗口
文档
并不重要。它将查找
window.pageYOffset
,如果找不到它,它将返回
document.body.scrollTop
。很好,现在我更好地理解了您的答案以及
scrollTop()
方法背后的jQuery代码,感谢您的简单解释。在上面的几行中,我展示了我从同一个窗口上下文访问不同的文档对象,这就是我在写“一个窗口可以包含多个框架,因此可以包含许多文档”时的意思。@EmanueleDelGrande很高兴你得到了它!我还编辑了我的答案,以便更清楚。好的,我也理解你关于一对一窗口记录通信的观点;您确认:
window.frames[0]。contentWindow!==window
(我在框架上做了很多工作:
// first iframe in main document
var ifr = document.getElementsByTagName('iframe')[0];
var ifrWindow = ifr.contentWindow;
var ifrDocument = ifrWindow.document; 
// The above is good for new and old browsers; 
// ifr.contentDocument is also available on modern browsers