Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带回调函数的requestAnimationFrame?_Javascript - Fatal编程技术网

Javascript 带回调函数的requestAnimationFrame?

Javascript 带回调函数的requestAnimationFrame?,javascript,Javascript,单击按钮后,我正在画布上设置一些动画。动画完成后,我想调用一个函数,该函数作为参数传递到初始化requestAnimationFrame的函数中 这可能吗 我尝试了各种方法,包括匿名函数等 var anim = false; var game = new Game(); function Game(){ this.turn = 1; this.move = function(){ this.animate(game.advanceTurn); } this.adva

单击按钮后,我正在画布上设置一些动画。动画完成后,我想调用一个函数,该函数作为参数传递到初始化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();
    }
  }
i、 点击按钮,制作动画,动画完成,调用game.advanceTurn

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

您可以使用bind来传递回调函数。同时,您还可以传递此信息,以便保留对当前游戏对象实例的引用:

函数游戏{ var i=0; var anim=假; 这1.turn=1; this.move=函数{ this.animatethis.advanceTurn.bindthis; } this.advanceTurn=函数{ 这个.turn++; } this.animate=functioncallback{ var done=false; anim=window.requestAnimationFramethis.animate.bindthis,回调; //动画代码在这里 console.logi++; 如果i>5{ window.cancelAnimationFrameanim; i=0; 动漫=假; 回调; } } } 新游戏。动画功能{ console.log'callback received'; }; 您可以使用bind来传递回调函数。同时,您还可以传递此信息,以便保留对当前游戏对象实例的引用:

函数游戏{ var i=0; var anim=假; 这1.turn=1; this.move=函数{ this.animatethis.advanceTurn.bindthis; } this.advanceTurn=函数{ 这个.turn++; } this.animate=functioncallback{ var done=false; anim=window.requestAnimationFramethis.animate.bindthis,回调; //动画代码在这里 console.logi++; 如果i>5{ window.cancelAnimationFrameanim; i=0; 动漫=假; 回调; } } } 新游戏。动画功能{ console.log'callback received'; }; 你没有正确地编写你的课程

在游戏类中,您使用的是变量游戏,但您应该使用这个

比如说,

window.requestAnimationFrame(game.animate);
应该是

window.requestAnimationFrame(this.animate);
你为什么要把动画设为假的?请求动画帧

此.turn应该从0开始,而不是从1开始

move调用animate是没有意义的

事实上,你试图使用的结构是在给你挖坟墓

我认为你最好重新开始,第二次做对

你没有正确地编写你的课程

在游戏类中,您使用的是变量游戏,但您应该使用这个

比如说,

window.requestAnimationFrame(game.animate);
应该是

window.requestAnimationFrame(this.animate);
你为什么要把动画设为假的?请求动画帧

此.turn应该从0开始,而不是从1开始

move调用animate是没有意义的

事实上,你试图使用的结构是在给你挖坟墓

我认为你最好重新开始,第二次做对