|
@@ -135,30 +135,41 @@ this.hooksFrame = this.hooksFrame || (() => {
|
|
|
|
|
|
|
|
let warningRequestAnimationFrameDisplayed;
|
|
let warningRequestAnimationFrameDisplayed;
|
|
|
const pendingRequestAnimationFrameCalls = new Map();
|
|
const pendingRequestAnimationFrameCalls = new Map();
|
|
|
|
|
+ const pendingSetTimeoutCalls = new Map();
|
|
|
window.requestAnimationFrame = function (callback) {
|
|
window.requestAnimationFrame = function (callback) {
|
|
|
if (!warningRequestAnimationFrameDisplayed) {
|
|
if (!warningRequestAnimationFrameDisplayed) {
|
|
|
console.warn("SingleFile is hooking the requestAnimationFrame and cancelAnimationFrame functions to load deferred images."); // eslint-disable-line no-console
|
|
console.warn("SingleFile is hooking the requestAnimationFrame and cancelAnimationFrame functions to load deferred images."); // eslint-disable-line no-console
|
|
|
warningRequestAnimationFrameDisplayed = true;
|
|
warningRequestAnimationFrameDisplayed = true;
|
|
|
}
|
|
}
|
|
|
|
|
+ let id;
|
|
|
if (loadDeferredImages) {
|
|
if (loadDeferredImages) {
|
|
|
- return setTimeout(callback, 0);
|
|
|
|
|
|
|
+ id = setTimeout(() => {
|
|
|
|
|
+ pendingSetTimeoutCalls.delete(id);
|
|
|
|
|
+ callback(0);
|
|
|
|
|
+ }, 0);
|
|
|
|
|
+ pendingSetTimeoutCalls.set(id, callback);
|
|
|
} else {
|
|
} else {
|
|
|
- const id = requestAnimationFrame(timestamp => {
|
|
|
|
|
|
|
+ id = requestAnimationFrame(timestamp => {
|
|
|
pendingRequestAnimationFrameCalls.delete(id);
|
|
pendingRequestAnimationFrameCalls.delete(id);
|
|
|
callback(timestamp);
|
|
callback(timestamp);
|
|
|
});
|
|
});
|
|
|
pendingRequestAnimationFrameCalls.set(id, callback);
|
|
pendingRequestAnimationFrameCalls.set(id, callback);
|
|
|
- return id;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ return id;
|
|
|
};
|
|
};
|
|
|
window.requestAnimationFrame.toString = function () { return "requestAnimationFrame() { [native code] }"; };
|
|
window.requestAnimationFrame.toString = function () { return "requestAnimationFrame() { [native code] }"; };
|
|
|
|
|
|
|
|
window.cancelAnimationFrame = function (id) {
|
|
window.cancelAnimationFrame = function (id) {
|
|
|
const pendingCallDeleted = pendingRequestAnimationFrameCalls.delete(id);
|
|
const pendingCallDeleted = pendingRequestAnimationFrameCalls.delete(id);
|
|
|
- if (loadDeferredImages && !pendingCallDeleted) {
|
|
|
|
|
- return clearTimeout(id);
|
|
|
|
|
- } else {
|
|
|
|
|
|
|
+ if (pendingCallDeleted) {
|
|
|
return cancelAnimationFrame(id);
|
|
return cancelAnimationFrame(id);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ const pendingCallDeleted = pendingSetTimeoutCalls.delete(id);
|
|
|
|
|
+ if (pendingCallDeleted) {
|
|
|
|
|
+ return clearTimeout(id);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return cancelAnimationFrame(id);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
window.cancelAnimationFrame.toString = function () { return "cancelAnimationFrame() { [native code] }"; };
|
|
window.cancelAnimationFrame.toString = function () { return "cancelAnimationFrame() { [native code] }"; };
|