我使用jQuery .scrollTop在div中滚动图片。它在Firefox中运行良好 - 滚动非常流畅和快速。在IE 8中,滚动非常缓慢且出现故障 - 图像在大约一秒钟内滚动一次 - 两秒钟。图像大小平均在2000 * 2000和4000 * 4000像素之间。
有没有办法改进IE 8的这个?
IE 7中的性能略好一些,但仍然不够好。
谢谢
编辑:我认为问题在于如何在IE 7和8中实现滚动。我启用了两个滚动条(overflow-x和overflow-y),我尝试了滚动使用这些滚动条的图像。问题完全一样。我试过在功能相当不足的PC上运行它 - 几年前使用2 GB RAM的奔腾双核以及配备2.8GHz CPU 1600Mhz RAM的Core i7台式机,结果几乎相同。 FireFox滚动速度更快,但其CPU使用率平均比IE CPU使用率高10%。这让我感到困惑......到目前为止,微软肯定会解决这个问题吗?
我发现另一件奇怪的事情是在Core 2 Duo笔记本电脑上滚动速度更快。我想知道这是否与显卡驱动程序有关...... IE 7/8是否甚至可以使用GPU?
对不起,如果这听起来很愚蠢,但我真的很有兴趣解决这个问题...... IE可能不那么糟糕......
答案 0 :(得分:6)
jQuery的.scrollTop()
在ie中是非常慢的,如果标记甚至稍微复杂或大,你将永远不会让它表现良好。
解决方案是不使用jQuery .scrollTop()
函数,而是根据本机属性.scrollHeight
和.scrollTop
构建自己的函数。
原因是计算偏移量的方式,这是jquery的.scrollTop()
慢度的基础 - 你必须走上DOM树并计算ie中每个父节点的偏移量。
jQuery尽其所能地做到了这一点,但是你总是可以更快地完成它,因为你事先知道了标记并且可以优化它 - 你甚至可以在大多数时间提前进行偏移计算并且只使用一个常数作为修饰语。
所有这一切,这可能不是jQuery的错 - 它可能只是ie渲染管道的问题 - 取决于你如何制作你的marklup和样式,滚动可能强制即完全重新渲染/重绘页面您滚动的每个像素,这将使所有像素减速到爬行。