推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Kasumi20

requestAnimationFrame 疑问

  •  
  •   Kasumi20 · Jun 9, 2022 · 1961 views
    This topic created in 1456 days ago, the information mentioned may be changed or developed.

    已经有一个组件使用了 requestAnimationFrame ,正在以 60HZ 的频率绘制一个动画,现在另外一个组件又要使用 requestAnimationFrame 绘制动画,那它们的频率都会降低为 30HZ ,怎么让两个组件的频率都是 60HZ ?

    6 replies    2022-06-10 09:22:55 +08:00
    thinkershare
        1
    thinkershare  
       Jun 9, 2022
    并不会降为 30HZ, 不知道你怎么得到这个结论的!
    Kasumi20
        2
    Kasumi20  
    OP
       Jun 9, 2022
    @thinkershare 为什么不会,一个全局的函数,它怎么知道是两个组件在调用
    loolac
        3
    loolac  
       Jun 9, 2022
    无需知道多少组件调用它,最终渲染时只需要知道调用后的如何影响渲染结果就可以。 `requestAnimationFrame`参数是回调函数,它只会在渲染时被执行。 每一帧被渲染前,你调用 n 次 `requestAnimationFrame`注册了 n 个回调函数, 那么这些函数在下一帧渲染时都会被执行。
    thinkershare
        4
    thinkershare  
       Jun 9, 2022
    @Kasumi20 你自己写个测试函数试一下不就知道了
    peterczg
        5
    peterczg  
       Jun 9, 2022
    requestAnimationFrame 是浏览器异步宏任务的 API ,调用后只是注册回调队列,等屏幕刷新的时候会执行,是否掉帧执行,取决于回调函数的执行时间和当前 CPU 的负载状态,当浏览器没有在 1/60 s (一般的显示器是 60HZ )内执行完,就会阻塞下一次刷新的执行。

    https://stackoverflow.com/questions/62911574/does-requestanimationframe-can-be-stuck-by-long-javascript
    Al0rid4l
        6
    Al0rid4l  
       Jun 10, 2022
    你搞错了 rAF 的机制, rAF 只是帮你把函数注册, 插入到每一帧渲染的间隔时间里执行, 只要你的任务执行时间不超过 1/60s, 那你多次调用 rAF 注册一百个函数也没问题, 只要这 100 个函数总执行时间不超过 1/60s, 那他们就依然都是 60Hz
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3010 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 15:07 · PVG 23:07 · LAX 08:07 · JFK 11:07
    ♥ Do have faith in what you're doing.