mediawiki-skins-Citizen/resources/skins.citizen.scripts/deferUntilFrame.js
alistair3149 8640d4ef30
feat(toc): switch to ToC implementation based on Vector 2022
This will serve as the groundwork of merging the intersection observers
and collapsible toc in the future.
2024-09-10 18:28:12 -04:00

24 lines
596 B
JavaScript

// Adopted from Vector 2022
/**
* Helper method that calls a specified callback before the browser has
* performed a specified number of repaints.
*
* Uses `requestAnimationFrame` under the hood to determine the next repaint.
*
* @param {Function} callback
* @param {number} frameCount The number of frames to wait before calling the
* specified callback.
*/
function deferUntilFrame( callback, frameCount ) {
if ( frameCount === 0 ) {
callback();
return;
}
requestAnimationFrame( () => {
deferUntilFrame( callback, frameCount - 1 );
} );
}
module.exports = deferUntilFrame;