请求动画帧范围更改为窗口
requestAnimationFrame scope change to window
我有一串对象,看起来像这样:
Game.world.update()
我想使用 requestAnimationFrame 来确定此函数的帧速率。
但是当我像这样实现它时:
World.prototype.update = function()
{
requestAnimationFrame(this.update);
}
范围从世界对象更改为窗口对象。如何在调用 requestAnimationFrame() 时维护我想要的范围?我知道它与匿名函数等有关,但我无法理解它。
常用方法,适用于任何地方:
World.prototype.update = function()
{
var self = this;
requestAnimationFrame(function(){self.update()});
}
或者使用 ES5 Function.prototype.bind
(兼容性):
World.prototype.update = function()
{
requestAnimationFrame(this.update.bind(this)});
}
另一种方法是使用 lambda 表达式,如下所示:
requestAnimationFrame((timestamp) => { loop(timestamp) });
这也保持了范围,但它更干净一些。
Game.world.update.call(scope);
其中范围是要传入的任何范围。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call#Description
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 防止Iframe窗体在新窗口中打开
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 正在全局范围中查找JavaScript函数
- 调整窗口大小时,可拖动的对象会出现在容器外部
- ngDialog-弹出窗口未更新范围变量
- 我应该使用 self 还是窗口来引用全局范围
- 请求动画帧范围更改为窗口
- HTML5 范围输入值在引导弹出窗口中没有变化
- Angular js $compile Javascript 窗口范围
- 此范围是指窗口
- 模态窗口中的范围(AngularJS指令)
- 为什么我需要在主干路由过滤器中指定窗口变量范围
- 为什么选择范围和弹出窗口不能在javascript中一起工作
- 模型窗口内的AngularJS范围
- 如何根据范围内的窗口大小调整网格块的大小
- 如何“解除绑定”Mapbox中的弹出窗口?只允许从一定范围内的标记弹出(当用户移动时改变)
- 是Chrome扩展内容脚本范围共享时,打开一个新的选项卡与窗口.打开(自Chrome 45)
- JavaScript DOM向窗口选择对象添加范围
- 窗口.onload范围