jquery - 修复了使用鼠标滚轮滚动时元素闪烁的问题

标签 jquery css-position flicker

我试图使侧边栏在滚动到某个点后固定在顶部。

var sidebarTopPos = $('#sidebar').offset().top;
$(window).scroll(function(event) {
    if ($(window).scrollTop() >= sidebarTopPos) {
        $('#sidebar').css({
            position: 'fixed',
            top: 0
        });
    }
    else {
        $('#sidebar').css({
            position: 'relative'
        });
    }
});​

看看这个 jsfiddle

当我向下拖动滚动条时,整个事情工作正常。然而,当我尝试使用鼠标滚轮滚动时,当侧栏从“相对”更改为“固定”时,我会看到恼人的闪烁,我已经尝试了很多东西。请帮忙。

编辑:也许我应该更清楚。侧边栏仅在穿过顶部 div 时才会“闪烁”

最佳答案

我遇到了同样的问题,这似乎是当您的浏览器根据您的计算机 GPU、内存、CPU 等处理太多事情时发生的错误...,我能够修复通过将以下转换代码添加到固定位置元素(transform:translateZ(0);-webkit-transform:translateZ(0);),强制浏览器使用硬件加速来访问设备的图形处理单元 (GPU) 让像素飞起来。另一方面,Web 应用程序在浏览器的上下文中运行,这让软件可以完成大部分(如果不是全部)渲染工作,从而减少转换的能力。但 Web 已经迎头 catch ,大多数浏览器供应商现在都通过特定的 CSS 规则提供图形硬件加速。

使用-webkit-transform:translate3d(0,0,0);将使 GPU 开始执行 CSS 转换,使它们更平滑(更高的 FPS)。

注意:translate3d(0,0,0) 对于您所看到的内容没有任何作用。它将对象在 x、y 和 z 轴上移动 0px。这只是一种强制硬件加速的技术。

#sidebar {
    /* MAGIC HAPPENS HERE */
    transform: translateZ(0);
    -webkit-transform: translateZ(0);
}

关于jquery - 修复了使用鼠标滚轮滚动时元素闪烁的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13402029/

相关文章:

javascript - 将多个复选框保存在变量中以便稍后显示?

php - 制作画廊页面的最佳方式

html - 水平对齐搜索栏和按钮

wpf - D3DImage 和 SharpDX 在慢速硬件上闪烁

c++ - 尽管应用了已知的抗闪烁技术,但我的应用程序在调整大小时略微闪烁

javascript - 向下滚动 iFrame - jQuery/JS

javascript - 如何滚动到div的底部

html - 紧贴图片周围的 div

css - Angular Material Flex : positioning a FAB dial relative to a responsive image

.net - 减少 .NET FlowLayoutPanel 的闪烁