Javascript 在IE中增加jquery滚动频率

Javascript 在IE中增加jquery滚动频率,javascript,jquery,css,internet-explorer,Javascript,Jquery,Css,Internet Explorer,我有一个表格标题,滚动100px后必须保持顶部的粘性(表格上方有一个边距)。我所做的是将其位置设置为absolute,并使用$(document.scrollTop())计算相应的top值,然后使用$(document.scroll)更新其位置。在Firefox和Chrome中,一切都很顺利,但在IE中却不顺利。在IE中,标题的滚动一点也不顺利 我做了一个测试,打印了(document).scrollTop()的值,并注意到,虽然Firefox和Chrome每隔几个像素触发一次滚动事件,也就是说

我有一个表格标题,滚动100px后必须保持顶部的粘性(表格上方有一个边距)。我所做的是将其位置设置为
absolute
,并使用
$(document.scrollTop()
)计算相应的
top
值,然后使用
$(document.scroll)更新其位置
。在Firefox和Chrome中,一切都很顺利,但在IE中却不顺利。在IE中,标题的滚动一点也不顺利

我做了一个测试,打印了
(document).scrollTop()
的值,并注意到,虽然Firefox和Chrome每隔几个像素触发一次滚动事件,也就是说,无论我滚动5个像素还是500个像素,每次滚轮移动都会触发一次滚动事件

有没有办法提高IE中滚动事件的更新频率

我已经尝试过的:

  • 将标题位置设置为“固定”而不是“绝对”会有所帮助,但表格非常大,问题会转移到水平滚动
  • 长时间延迟使用CSS动画看起来很奇怪,有点烦人;短时间延迟没有帮助,问题仍然存在
  • 使用setInterval每100ms更新一次标题位置。这在浏览器上太重,甚至不起作用。在IE中,结果保持不变,因为滚动值在移动结束之前保持不变
注意:我只针对IE11


编辑:我刚刚编辑了这个提琴供您试用。我感谢您的帮助,但请记住,我不能在不破坏我的网站其余部分的情况下改变一切,因为我的网站已经充满了大量的交互元素。

我认为您无法改变Internet Explorer的工作方式。事实上,它在IE上的表现非常糟糕。What您应该做的是,使用
fixed
定位使用此简单的解决方法:

if (scrollTop > 20) {
    // Stays fixed on top
    $("thead").css({
        position: 'fixed',
        top: 0
    }).closest('table').addClass('scrolling');

} else {
    // Moves with scroll
    $("thead").css({
        position: 'static',
        top: 'auto'
    }).closest('table').removeClass('scrolling');
}
然后可以删除此css:

thead {
    position: absolute;
    top: 10px;
}
加上这个,

table.scrolling {
    margin-top: 50px;
}
编辑:

对于更复杂的集成,您可能想看看这个现成的插件,它经过测试,可以与Internet Explorer配合使用:

我不明白为什么我被否决了。我能以某种方式改进我的问题吗?很难说,如果我们没有一把小提琴可玩,“平滑滚动”导致了很多问题。在禁用该功能后尝试测试。你能用小提琴试试吗?谢谢你的回答,但是如果出现水平滚动,固定定位无法解决问题。我必须手动使用scrollLeft滚动。:/也许如果我检测到滚动的方向,我可以将其从绝对do fixed更改为absolute do fixed,但这是一种过度操作,因此我我想我会接受这个。示例:那么,也许你应该使用这个插件:。我已经在IE下测试了这个演示,它运行得非常好。非常好的插件!谢谢Brewal。把它作为一个答案发布,这样我就可以接受了。我会尝试将它集成到我的应用程序中,并祈祷它不会破坏其他一切。好的,它完成了。这个插件看起来很好编码,然后应该很容易集成。这将是一个完美的解决方案,但它对我的应用程序非常沉重,可能是因为我有25行和25列。
if (scrollTop > 20) {
    // Stays fixed on top
    $("thead").css({
        position: 'fixed',
        top: 0
    }).closest('table').addClass('scrolling');

} else {
    // Moves with scroll
    $("thead").css({
        position: 'static',
        top: 'auto'
    }).closest('table').removeClass('scrolling');
}