滚动事件期间的CSS定位在OSX Safari上无响应和抖动(适用于Chrome / Firefox)

时间:2015-10-02 12:05:32

标签: javascript html css scroll safari

我的网站上有一个粘性边框,在窗口的滚动事件中,我会在用户滚动时更新它以跟随窗口。

CSS:

.fixed {
    position: relative;
    background: black;
    color: white;
    height: 40px;
}
.container {
    height: 2000px;
}

HTML:

<div class="container">
    <div class="fixed">Fixed</div>
</div>

JS:

$(window).scroll( function() {
    $('.fixed').css({top: $(window).scrollTop()});   
});

演示:https://jsfiddle.net/xt8c00yq/

我知道滚动事件在移动浏览器上不可靠且无响应,所以我已经为设备禁用了它。然而,Safari的桌面版本似乎也是滞后和紧张。它适用于Chrome和Firefox。在两个浏览器上测试演示以便自己查看。

是否有任何已知的黑客可以在Safari上顺利更新?

(位置:固定不是一个选项,因为它需要流动以响应不固定的兄弟css转换)

1 个答案:

答案 0 :(得分:0)

使用translate3d进入硬件加速渲染。

$(window).scroll( function() {

    scrolled = $(window).scrollTop();   

    $('.fixed').css({
        '-webkit-transform' : 'translate3d(0,' + scrolled + 'px,0)',
        '-moz-transform'    : 'translate3d(0,' + scrolled + 'px,0)',
        '-ms-transform'     : 'translate3d(0,' + scrolled + 'px,0)',
        '-o-transform'      : 'translate3d(0,' + scrolled + 'px,0)',
        'transform'         : 'translate3d(0,' + scrolled + 'px,0)'
    });

});