Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I pass argument with requestAnimationFrame?

In the main program I randomly choose an object which I'd like to animate, so I call the function with the object as the argument. The first loop is okay, x is finely set, but in the next turn it becomes undefined.

Something like this:

var anim = {         mainFunc: function(x) {             anim.update(x);             anim.redraw(x);             window.requestAnimationFrame(anim.mainFunc);         },          update: function(x) {          },          redraw: function(x) {          } };  var n=Math.floor(Math.random() * (ArrayOfAnimObject.length)); anim.mainFunc(ArrayOfAnimObject[n]); 
like image 575
Torfiks Avatar asked Nov 10 '13 18:11

Torfiks


People also ask

What is the aim of the requestAnimationFrame method?

requestAnimationFrame() method tells the browser that you wish to perform an animation and requests that the browser calls a specified function to update an animation before the next repaint. The method takes a callback as an argument to be invoked before the repaint.

Can you have multiple requestAnimationFrame?

You should be using only one requestAnimationFrame call as calls to requestAnimationFrame do stack.

Is requestAnimationFrame a Macrotask?

A macrotask queue is a queue for setTimeout and requestAnimationFrame .


2 Answers

You either need to create a reference or wrap the function call in another function like so:

mainFunc: function(x) {     anim.update(x);     anim.redraw(x);     window.requestAnimationFrame(function() {         anim.mainFunc(x);     }); } 
like image 167
kalley Avatar answered Oct 05 '22 23:10

kalley


You can also use .bind.

mainFunc: function(x) {     anim.update(x);     anim.redraw(x);     window.requestAnimationFrame(anim.mainFunc.bind(anim,x)); } 
like image 39
Archy Will He 何魏奇 Avatar answered Oct 05 '22 22:10

Archy Will He 何魏奇