uniapp 打包成app时出现requestanimationframe is not defined如何解决

我在使用uniapp打包成app时遇到了"requestAnimationFrame is not defined"的错误,这个错误出现在安卓端,iOS端正常。想知道具体是什么原因导致的?有没有什么解决方案可以修复这个问题?

2 回复

在uni-app中,requestAnimationFrame未定义通常是因为打包时未正确配置。解决方法:

  1. 检查是否使用了HBuilderX最新版本
  2. 在manifest.json中配置"renderer"为"auto"
  3. 如仍报错,可在代码中添加polyfill:
if (typeof requestAnimationFrame === 'undefined') {
  global.requestAnimationFrame = callback => setTimeout(callback, 16)
}

在 UniApp 打包成 App 时出现 requestAnimationFrame is not defined 错误,通常是因为在小程序或 App 环境中缺少浏览器全局 API。以下是解决方法:

解决方案

  1. 添加兼容性代码
    main.js 或页面逻辑中,添加以下代码以模拟 requestAnimationFrame

    if (typeof requestAnimationFrame === 'undefined') {
      global.requestAnimationFrame = function(callback) {
        return setTimeout(callback, 16); // 模拟 60fps
      };
      global.cancelAnimationFrame = function(id) {
        clearTimeout(id);
      };
    }
    
  2. 使用条件编译
    如果仅在特定平台(如 App)出现此问题,可使用条件编译:

    // #ifdef APP-PLUS
    if (typeof requestAnimationFrame === 'undefined') {
      // 添加上述兼容代码
    }
    // #endif
    
  3. 检查第三方库
    若问题由第三方库(如动画库)引起,尝试:

    • 更新库到最新版本。
    • 在库调用前先注入上述兼容代码。

注意事项

  • 此问题通常出现在 App 端,因部分浏览器 API 在原生环境中未实现。
  • 模拟的 requestAnimationFrame 可能无法完全匹配浏览器性能,但对大多数场景足够。

通过以上步骤即可解决该错误,确保动画或渲染逻辑正常运行。

回到顶部