如果我们创建一个简单的测试案例,例如:
document.documentElement.addEventListener('scroll', function() {
console.log(document.documentElement.scrollTop);
});
然后使用滚动条通过点击轨道或使用PageDown/PageUp进行滚动,然后我们会发现在滚动动画结束时只会收到一个事件。
理论上我可以通过模拟滚动事件来解决其中一些行为问题。以下是使用jQuery和Underscore的示例代码:
$(function () {
var $document = $(document), until = 0;
var throttleScroll = _.throttle(function () {
$document.scroll();
if (+new Date < until) {
setTimeout(throttleScroll, 50);
}
}, 50);
$document.keydown(function (evt) {
if (evt.which === 33 || evt.which === 34) {
until = +new Date + 300;
throttleScroll();
}
});
});
但它仍然无法正常工作。我们只能获得原始 scrollTop
和目标 scrollTop
的滚动事件,没有中间的值。
如果每隔10ms使用 console.log(document.documentElement.scrollTop)
,那么我们可以看到IE在滚动时不更新 scrollTop
。
如果我们想要将某些内容与滚动位置“固定”,这非常令人沮丧。在IE中会出现抖动。
我没有观察到任何其他浏览器上出现这种行为,也没有在之前的IE版本上进行测试。
如果有人找到了修复IE行为的方法(也许有一个神奇的CSS可以关闭IE 11中的平滑滚动?),那么我非常希望听到!
谢谢 :-)