Если мы сделаем простой тестовый пример, например:
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
, между значениями нет.
Если затем перейти и console.log(document.documentElement.scrollTop)
каждые 10 мс, тогда мы увидим, что IE просто не обновляет scrollTop
по мере прокрутки.
Это очень неприятно, если мы хотим "прикрепить" что-то к позиции прокрутки. Он становится отрывистым от IE.
Я не наблюдал этого поведения в любом другом браузере и не тестировал предыдущие версии IE.
Если кто-то нашел способ исправить поведение IE (может быть, есть волшебный CSS, чтобы отключить плавную прокрутку в IE 11?), то я бы очень хотел услышать об этом!
Спасибо: -)