如果我們做一個簡單的測試案例,如:IE 11平滑滾動不點火中間滾動事件
document.documentElement.addEventListener('scroll', function() {
console.log(document.documentElement.scrollTop);
});
然後去滾動通過點擊軌道使用滾動條,或者使用下頁/上一頁,那麼我們可以看到我們只在滾動動畫結束時得到一個事件。
現在理論上我可以通過模擬滾動事件來修復一些行爲。 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)
每10ms,那麼我們可以看到IE只是不更新scrollTop
,因爲它滾動。
如果我們想要將某些內容「釘」到滾動位置,這是非常令人沮喪的。它與IE瀏覽器變得生澀。
我沒有在任何其他瀏覽器上觀察到此行爲,也沒有使用以前的IE版本進行測試。
如果有人找到了解決IE瀏覽器行爲的方法(也許有一個神奇的CSS來關閉IE 11中的平滑滾動?),那麼我非常想聽聽它!
感謝:-)
什麼都沒有啊?也這麼覺得。 –
這是舊的,但我遇到了完全相同的問題。我嘗試過使用setInterval並強制該函數在60fps下更新,但這使得它在所有瀏覽器上都顯得非常緊張。此外,它似乎沒有在IE上有所作爲:\ – Jason
經過一番更多的調整之後,我發現最好的方法是儘可能使用'position:fixed'而不是'position:absolute'與手動'頂部'。這絕對是IE中的渲染錯誤。它沒有像禁用平滑滾動一樣顯示自身,但它仍然有點生澀。另外,平滑滾動默認是啓用的,所以幾乎所有的IE用戶都會注意到這個問題。 – Jason