Почему многие примеры для requestAnimationFrame вызывают requestAnimationFrame вне обратного вызова? - PullRequest
0 голосов
/ 29 апреля 2019

Я вижу много примеров того, как RequestAnimationFrame онлайн вызывает функцию дважды: внутри и снаружи обратного вызова.Я понимаю, почему мы называем это внутри;однако, есть ли причина, почему мы называем это снаружи?

Ссылка

let myReq;

function step(timestamp) {
  myReq = requestAnimationFrame(step); // I understand why we call it here.
  console.log(timestamp, myReq)
  if(timestamp >= 1000) {
    cancelAnimationFrame(myReq);
  }
}

myReq = requestAnimationFrame(step);  // why invoke rAF here.

1 Ответ

2 голосов
/ 29 апреля 2019

Это начальный вызов step в следующем кадре анимации; это по сути начало анимации. Без этого у вас есть это:

let myReq;

function step(timestamp) {
  myReq = requestAnimationFrame(step);
  console.log(timestamp, myReq)
  if(timestamp >= 1000) {
    cancelAnimationFrame(myReq);
  }
}

... в этом случае у нас никогда не будет звонящего на step, и он никогда не вызывается.

В качестве альтернативы вы можете опустить оболочку requestAnimationFrame для начального вызова step:

let myReq;

function step(timestamp) {
  myReq = requestAnimationFrame(step); // I understand why we call it here.
  console.log(timestamp, myReq)
  if(timestamp >= 1000) {
    cancelAnimationFrame(myReq);
  }
}

myReq = step;  // why invoke rAF here.

Но при первом вызове step необязательно будет ждать первый доступный кадр анимации.

...