javascript - requestAnimationFrame 带有回调函数?

标签 javascript

单击按钮后,我会在 Canvas 上制作一些动画。动画完成后,我想调用一个函数,该函数作为参数传递到首先初始化 requestAnimationFrame 的函数中。

这可能吗?

我尝试了各种方法,使用匿名函数等。

var anim = false;
var game = new Game();

function Game(){
  this.turn = 1;

  this.move = function(){
    this.animate(game.advanceTurn);
  }

  this.advanceTurn = function(){
     this.turn++;
  }

  this.animate = function(callback){
    var done = false;
    anim = window.requestAnimationFrame(game.animate);

    // animation code here

    if (done){
        window.cancelAnimationFrame(anim);
        anim = false;
        callback();
    }
  }

即单击按钮,制作动画,动画完成,调用 game.advanceTurn。

在记录提供的参数时,控制台将首先记录我的回调函数,然后将其替换为我认为的计时器测量值(符合 rAF 描述的 MDN 描述)。

最佳答案

您可以使用bind来传递您的回调函数。同时您还可以传递 this,这样您就可以保留对当前 Game 对象实例的引用:

function Game(){
  var i = 0;
  var anim = false;
  
  this.turn = 1;

  this.move = function(){
    this.animate(this.advanceTurn.bind(this));
  }

  this.advanceTurn = function(){
     this.turn++;
  }

  this.animate = function(callback){
    var done = false;
    anim = window.requestAnimationFrame(this.animate.bind(this, callback));

    // animation code here
    console.log(i++);

    if (i>5){
        window.cancelAnimationFrame(anim);
        i = 0;
        anim = false;
        callback();
    }
  }
}

new Game().animate(function () {
   console.log('callback received');
});

关于javascript - requestAnimationFrame 带有回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39498825/

相关文章:

javascript - 我的响应式导航栏在移动设备上不起作用

javascript - 如何在文件中存储有关用户的信息,然后读取和修改它们

javascript - 普通 Javascript 在 Angular CLI 组件中不起作用

javascript - Angular 7 的 addEventListerner 行为不一致

JavaScript - 识别具有唯一属性的对象

javascript - 单击图标后表格展开

javascript - 外部 Javascript 未调用

javascript - 滚动具有多个固定表头的表格

javascript - 根据iframe的高度隐藏Div

javascript - 可以使用变量值来指定 jquery 对象名称吗?