Merge pull request #104 from openseadragon/raf

Our requestAnimationFrame no longer changes the global window object
This commit is contained in:
iangilman 2013-05-24 09:17:59 -07:00
commit e5187e4864
2 changed files with 37 additions and 13 deletions

View File

@ -1644,33 +1644,31 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
};
// Adding support for HTML5's requestAnimationFrame as suggested by acdha
// implementation taken from matt synders post here:s
// Adding support for HTML5's requestAnimationFrame as suggested by acdha.
// Implementation taken from matt synder's post here:
// http://mattsnider.com/cross-browser-and-legacy-supported-requestframeanimation/
(function( w ) {
// most browsers have an implementation
w.requestAnimationFrame = w.requestAnimationFrame ||
var requestAnimationFrame = w.requestAnimationFrame ||
w.mozRequestAnimationFrame ||
w.webkitRequestAnimationFrame ||
w.msRequestAnimationFrame;
w.cancelAnimationFrame = w.cancelAnimationFrame ||
var cancelAnimationFrame = w.cancelAnimationFrame ||
w.mozCancelAnimationFrame ||
w.webkitCancelAnimationFrame ||
w.msCancelAnimationFrame;
// polyfill, when necessary
if ( w.requestAnimationFrame && w.cancelAnimationFrame ) {
//we cant assign window.requestAnimationFrame directly to $.requestAnimationFrame
//without getting Illegal Invocation errors in webkit so call in a
//wrapper
$.requestAnimationFrame = function( callback ){
return w.requestAnimationFrame( callback );
if ( requestAnimationFrame && cancelAnimationFrame ) {
// We can't assign these window methods directly to $ because they
// expect their "this" to be "window", so we call them in wrappers.
$.requestAnimationFrame = function(){
return requestAnimationFrame.apply( w, arguments );
};
$.cancelAnimationFrame = function( requestId ){
return w.cancelAnimationFrame( requestId );
$.cancelAnimationFrame = function(){
return cancelAnimationFrame.apply( w, arguments );
};
} else {
var aAnimQueue = [],

View File

@ -62,4 +62,30 @@
});
});
// ----------
asyncTest("requestAnimationFrame", function() {
var timeWatcher = Util.timeWatcher();
OpenSeadragon.requestAnimationFrame(function() {
ok(true, 'frame fired');
timeWatcher.done();
});
});
// ----------
asyncTest("cancelAnimationFrame", function() {
var frameFired = false;
setTimeout(function() {
strictEqual(frameFired, false, 'the frame never fired');
start();
}, 150);
var frameId = OpenSeadragon.requestAnimationFrame(function() {
frameFired = true;
});
OpenSeadragon.cancelAnimationFrame(frameId);
});
})();