diff --git a/src/ui/View.js b/src/ui/View.js index eb2afcd4..72f47616 100644 --- a/src/ui/View.js +++ b/src/ui/View.js @@ -145,11 +145,11 @@ var View = Base.extend(Callback, /** @lends View# */{ onFrame: { install: function() { /*#*/ if (options.browser) { - // Call the onFrame handler straight away and initialize the + // Request a frame handler straight away to initialize the // sequence of onFrame calls. if (!this._requested) { this._animate = true; - this._handleFrame(true); + this._requestFrame(); } /*#*/ } // options.browser }, @@ -169,21 +169,23 @@ var View = Base.extend(Callback, /** @lends View# */{ _time: 0, _count: 0, - _handleFrame: function(request) { - this._requested = false; - // See if we need to stop due to a call to uninstall() - if (!this._animate) - return; + _requestFrame: function() { + var that = this; + DomEvent.requestAnimationFrame(function() { + that._requested = false; + // Do we need to stop due to a call to the frame event's uninstall() + if (!that._animate) + return; + // Request next frame already before handling the current frame + that._requestFrame(); + that._handleFrame(); + }, this._element); + this._requested = true; + }, + + _handleFrame: function() { // Set the global paper object to the current scope paper = this._scope; - if (request) { - // Request next frame already - this._requested = true; - var that = this; - DomEvent.requestAnimationFrame(function() { - that._handleFrame(true); - }, this._element); - } var now = Date.now() / 1000, delta = this._before ? now - this._before : 0; this._before = now; @@ -213,11 +215,11 @@ var View = Base.extend(Callback, /** @lends View# */{ time: 0, count: 0 }; - if (++this._frameItemCount == 1) + if (++this._frameItemCount === 1) this.attach('frame', this._handleFrameItems); } else { delete items[item._id]; - if (--this._frameItemCount == 0) { + if (--this._frameItemCount === 0) { // If this is the last one, just stop animating straight away. this.detach('frame', this._handleFrameItems); }