javascript - requestAnimationframe错误

标签 javascript html animation requestanimationframe

以下内容导致错误(FF、Chrome 和?):

JSFiddle recreation

Engine.prototype.requestAnimationFrame = window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        function(/* function */ callback, /* DOMElement */ element){
            window.setTimeout(callback, 1000 / 60);
};

完整的上下文是:

var Engine = function(model) {

        this.model = model;
    };

    Engine.prototype.start = function() {
        console.log("ready")
        this.requestAnimationFrame(function() {
            console.log("done");
        });
    };

    Engine.prototype.updateUi = function() {

        console.log("update ui");
        this.requestAnimationFrame(this.updateUi);
    };

    Engine.prototype.logRAF = function() {
        console.log(window.requestAnimationFrame ||
            window.webkitRequestAnimationFrame ||
            window.mozRequestAnimationFrame ||
            window.oRequestAnimationFrame ||
            window.msRequestAnimationFrame);
        return this;
    };

    Engine.prototype.requestAnimationFrame = window.requestAnimationFrame ||
            window.webkitRequestAnimationFrame ||
            window.mozRequestAnimationFrame ||
            window.oRequestAnimationFrame ||
            window.msRequestAnimationFrame ||
            function(/* function */ callback, /* DOMElement */ element){
                window.setTimeout(callback, 1000 / 60);
            };

var engine = new Engine();
engine.logRAF().start();

FF 中的错误如下 - mozRequestAnimationFrame(): NS_ERROR_XPC_BAD_OP_ON_WN_PROTO:对 WrappedNative 原型(prototype)对象的非法操作

Chrome 中的错误如下 - webkitRequestAnimationFrame(): 未捕获的类型错误:非法调用

在线:

this.requestAnimationFrame...

日志读取打印出“ready”,但不是“done”

如果我只使用一个函数而不是本地 RAF 方法,它就可以工作(记录“完成”):

JSFiddle recreation

RequestAnimationFrames 是怎么回事?

最佳答案

当你调用window的函数时,context(this)必须是window ,而不是您的对象(Engine 的实例)。 bind将帮助您解决该问题:

Engine.prototype.requestAnimationFrame = 
        (window.requestAnimationFrame && window.requestAnimationFrame.bind(window)) ||
        (window.webkitRequestAnimationFrame && window.webkitRequestAnimationFrame.bind(window)) ||
        //etc...

live demo

关于javascript - requestAnimationframe错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14068436/

相关文章:

android - 纺车动画不准确

ios - UIPropertyAnimator 导致崩溃

javascript - 用 Selenium 刮和点击表格

javascript - 避免在 FB.ui 上进行确认

javascript - 用图像图案绘制 View

javascript - anchor 在 chrome 和 safari 浏览器中不起作用

html - Bootstrap 3 带有图像背景的静态侧边栏

未从 ASP.NET 用户控件调用 Javascript

python - BeautifulSoup4 无法从此表中抓取数据

多个 animationend 事件上的 jQuery when()