ios: Patch cancelAnimationFrame whenever fakeRequestAnimationFrame is used

The existing implementation of fakeRequestAnimationFrame
did not return a timer ID, so the frame could not be cancelled
if you wanted to cancel it. But if you do want to cancel it,
it needs to be cancelled through clearTimeout instead of
cancelAnimationFrame, because the timer IDs are different.

Signed-off-by: Jonathan Barnes <jbarnes@pivotal.io>
This commit is contained in:
Travis Grathwell 2017-03-31 15:31:04 -07:00 committed by Jonathan Barnes
parent 57d9a64c14
commit bd70a73d43

View File

@ -643,8 +643,13 @@ PDFJS.compatibilityChecked = true;
// Support: IE<10, Android<4.0, iOS
(function checkRequestAnimationFrame() {
function fakeRequestAnimationFrame(callback) {
window.setTimeout(callback, 20);
function installFakeAnimationFrameFunctions() {
window.requestAnimationFrame = function (callback) {
return window.setTimeout(callback, 20);
};
window.cancelAnimationFrame = function (timeoutID) {
window.clearTimeout(timeoutID);
};
}
if (!hasDOM) {
@ -652,7 +657,7 @@ PDFJS.compatibilityChecked = true;
}
if (isIOS) {
// requestAnimationFrame on iOS is broken, replacing with fake one.
window.requestAnimationFrame = fakeRequestAnimationFrame;
installFakeAnimationFrameFunctions();
return;
}
if ('requestAnimationFrame' in window) {
@ -660,8 +665,10 @@ PDFJS.compatibilityChecked = true;
}
window.requestAnimationFrame =
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
fakeRequestAnimationFrame;
window.webkitRequestAnimationFrame;
if (!('requestAnimationFrame' in window)) {
installFakeAnimationFrameFunctions();
}
})();
// Support: Android, iOS