javascript - 为什么 Chrome for Mobile 不会重绘我的固定标题?

标签 javascript css google-chrome mobile-chrome

我有一个标题,我想在滚动时控制它的可见性。向下滚动页面时,页眉应像任何元素一样运行。向上滚动页面时,无论页面位置如何,我都希望在页面上升时显示标题。通过观察 simple example 可以最好地理解这种行为.

我正在监听滚动事件并使用负的最高值更新固定位置的 div:

$(function()
{
    var $header = $("#header");
    var $window = $(window);

    var headerHeight = $header.outerHeight();
    var headerY = $header.outerHeight();
    var scrollY = $window.scrollTop();

    $window.on("scroll", function()
    {
        headerY += scrollY - $window.scrollTop();
        if (headerY > headerHeight)
        {
            headerY = headerHeight;
        }
        else if (headerY < 0)
        {
            headerY = 0;
        }
        $header.css(
            {
                top: headerY - headerHeight,
            });
        scrollY = $window.scrollTop();
    });
});

但是,移动版 Chrome 中的行为完全不是我所期望的。 header 通常没有动画,并且会在达到边界时立即出现或消失。当它制作动画时,性能会断断续续地不规则,并且通常只绘制一到三帧。使用桌面 Chrome 的移动仿真时不会出现此行为;它只发生在实际设备上。

这似乎只发生在处理页面顶部的固定位置元素时。如果我尝试以不同的方式更改固定元素,例如将其从侧面或底部移入,一切都会更接近预期。事实上,如果我改变固定位置的顶部元素和固定位置的侧元素,顶部元素的行为会更一致,like so .

为什么 Chrome for Mobile 在页面顶部的固定位置元素如此不稳定?有什么方法可以简洁地解释它吗?

最佳答案

尝试使用一些硬件加速的 CSS3 转换。不要使用 top 来定位您的元素,请尝试使用 transform:translateY

也可以尝试在标题元素上添加 transform:translateZ(0)

关于javascript - 为什么 Chrome for Mobile 不会重绘我的固定标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39187325/

相关文章:

使用 Javascript 更新 PHP

css - 额外的 Twitter Bootstrap 标签/按钮/警告/徽章颜色

javascript - 定位Div onClick,点击外部时隐藏

javascript - Web Midi - 列出设备名称

Google Chrome 中的 CSS float 错误

javascript - 在 switch case 中使用对象 - javascript

javascript - 更改字体系列 Morris Donut Chart

jquery - Bootstrap 问题。为什么我的右侧面板没有填满整个空间

google-chrome - 仅适用于 Opera、Safari 和 Chrome 的 CSS 样式表

Javascript:什么是带两个括号 ()() 的函数?