requestAnimationFrame 在 iOS 中没有被触发

问题描述 投票:0回答:1

我有一个使用 webview 的应用程序,其中运行一些 javascript 代码。 在那里,我在执行一些逻辑时使用 requestAnimationFrame

该应用程序已经运行了几年,没有出现任何问题,直到最近。

我注意到,由于某种原因,仅在 iOS (Safari) 上,即使逻辑到达与 requestAnimationFrame 关联的行,我传递给它的回调也永远不会被调用。

这段代码在过去几年中一直运行良好,我没有更改任何内容。

有人遇到过这样的问题吗? 是否与 Safari 中所做的任何更改有关?

注意

我不会共享任何代码,因为对 requestAnimationFrame 的调用非常标准,而且我本身没有运行任何动画。

I.E.

    requestAnimationFrame(() => {
        //Logic here
    });
ios safari requestanimationframe
1个回答
0
投票

我也遇到了同样的问题。不知道为什么会这样。我现在的解决方案是覆盖 requestAnimationFrame

var lastTime = 0;
window.requestAnimationFrame = function(callback, element) {
  var now = window.performance.now();
  var nextTime = Math.max(lastTime + 16, now); //First time will execute it immediately but barely noticeable and performance is gained.
  return setTimeout(function() { callback(lastTime = nextTime); }, nextTime - now);
};
window.cancelAnimationFrame = clearTimeout;

或者你可以向这个polyfill添加更多条件https://gist.github.com/paulirish/1579671?permalink_comment_id=2976376#gistcomment-2976376

© www.soinside.com 2019 - 2024. All rights reserved.