我编写了一个函数来锁定和解锁页面的滚动。核心机制依赖于保存 HTML 的style
属性和scrollTop
属性,更改scrollTop
为 0,并将保存scrollTop
为负 CSStop
和position: fixed
.
正如您在此演示中看到的那样,一切都令人满意(允许一些极端情况)。
问题是在 IE8 及以下版本中,scrollTop
在第 138 到 144 行中恢复样式和属性之间的解锁过程中会出现闪烁:
// Revert styles
$html.attr( 'style', $( '<x>' ).css( prevStyles ).attr( 'style' ) || '' );
// Revert scroll values
$( window )
.scrollLeft( prevScroll.scrollLeft )
.scrollTop( prevScroll.scrollTop );
我很惊讶一个以帧速率不稳定和处理速度慢而闻名的浏览器会找到时间和资源在连续的 Javascript 行之间重新绘制页面,而 Chrome、Firefox 显然要等到堆栈清除后再应用代码。
如何阻止 IE 在这两个语句之间绘制页面?