IE8 替代 window.scrollY?

IT技术 javascript html internet-explorer-8 cross-browser
2021-03-09 08:27:30

我正在尝试确定我使用window.scrollY. 但这在 IE8 中不受支持。什么是安全的跨浏览器替代方案?

6个回答

的跨浏览器兼容版本window.scrollYdocument.documentElement.scrollTop. 请参阅这篇Mozilla 文档的“注释”部分,了解 IE8 及更早版本中完整、详细的解决方法。

正如这里提到的pageYOffset是 window.scrollY 的另一种替代方法(请注意,这仅与 IE9+ 兼容)。

关于上面的链接,请检查示例 4以获取使用document.documentElement.scrollTop获取滚动位置的完全兼容的方式(它甚至考虑了@adeneo 提到的缩放!)document.documentElement.scrollLeft

在这里,自己试试这个例子!

@McX 这是因为 Chrome 存在一个尚未解决的错误(但从我看到的回复来看,它正在修复中)-code.google.com/p/chromium/issues/detail?编号=157855
2021-04-18 08:27:30
document.documentElement.scrollTop 在 Google Chrome 40 中给出 0
2021-05-01 08:27:30
2016 年 11 月,仍未修复。
2021-05-13 08:27:30
2016 年 1 月,仍未修复。
2021-05-15 08:27:30
2018 年 4 月 4 日,已修复 :)
2021-05-17 08:27:30

如果您不必经常使用它,请执行以下操作:

var scroll = window.scrollY //Modern Way (Chrome, Firefox) 
|| document.documentElement.scrollTop (Old IE, 6,7,8)
这有效,但我认为您不需要第二个(window.pageYOffset)。虽然它有效,但所有较旧的 IE 浏览器都支持document.documentElement.scrollTop获取滚动位置的方式。较新的 IE 浏览器(“Edge”)支持window.scrollY,如 MDN 中所述:developer.mozilla.org/en-US/docs/Web/API/Window/...
2021-05-04 08:27:30

如果您使用的是 jQuery,我使用 $(window).scrollTop() 来获取 IE 8 中的 Y 位置。它似乎有效。

如果您有正当理由不只是使用库来处理这种基本功能,请不要犹豫“不要重新发明轮子”。

Mootools 是开源的,你可以“窃取”它的实现,相关片段:

getScroll: function(){
    var win = this.getWindow(), doc = getCompatElement(this);
    return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
}

function getCompatElement(element){
    var doc = element.getDocument();
    return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
}

这两个是决定您当前浏览器具有哪种兼容模式的核心,然后决定是否使用window.pageYOffsetdocument.body.scrollTop基于该模式,甚至是document.html.scrollTop用于真正古老的有缺陷的浏览器。

根据 Niels 的回答,当只需要 Y 坐标时,我想出了一个稍微紧凑的解决方案:

function get_scroll_y() {
    return window.pageYOffset || document.body.scrollTop || document.html.scrollTop;
}