【问题标题】:Web page with parallax lags on scroll滚动时有视差滞后的网页
【发布时间】:2016-01-31 04:43:14
【问题描述】:

我目前正在开发一个 web page,在标题和网站的其他三个部分上具有滚动视差效果 (Stellar.js):但是,滚动它们会导致延迟,尤其是在页面顶部。

我已经尝试通过压缩来减小背景图像的大小,但并没有太大的不同;去除模糊效果也没有解决问题(它确实减少了延迟,但仍然不够平滑)。

该网站在 Firefox (W10) 上运行良好,几乎没有丢帧,但在 Chrome(Windows 和 OS X)和 Safari 上存在相当大的延迟。

有一些 JS 滚动触发的脚本正在运行,但我不知道这些是否可能是原因。有什么建议吗?

【问题讨论】:

  • 其他滚动事件可以去抖动吗?
  • 我想是这样,但是 JS 会是什么样子呢? (我对此并没有真正的经验)

标签: javascript jquery html css parallax


【解决方案1】:

您要做的是限制滚动事件。去抖动事件意味着事件在一定时间后才能再次触发。限制事件意味着该事件在每个时间段内只能触发这么多。

这是限制事件的函数(来源:http://sampsonblog.com/749/simple-throttle-function

// Create the listener function
function throttle (callback, limit) {
    var wait = false;                 // Initially, we're not waiting
    return function () {              // We return a throttled function
        if (!wait) {                  // If we're not waiting
            callback.call();          // Execute users function
            wait = true;              // Prevent future invocations
            setTimeout(function () {  // After a period of time
                wait = false;         // And allow future invocations
            }, limit);
        }
    }
 }

要使用它,只需执行以下操作:

function callback () {
    console.count("Throttled");
}

window.addEventListener("scroll", throttle( callback, 200 ));

【讨论】:

  • 感谢您的回答!它使滚动速度有所提高,但仍有一些滞后。我不知道是否可以为此做些什么。
  • 我一般会关注 js 性能的因素是图像大小、事件侦听器的数量、触发事件处理程序的频率(因此我们限制)、dom 节点的数量和 dom 操作的频率。这不是为了自我推销,但我为视差写了一些东西,其来源可能对您有所帮助:github.com/winhowes/parallax-container
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 2017-06-14
  • 1970-01-01
相关资源
最近更新 更多