delay.mjs 653 B

1234567891011121314151617181920212223
  1. import { time, frame, cancelFrame } from 'motion-dom';
  2. import { secondsToMilliseconds } from 'motion-utils';
  3. /**
  4. * Timeout defined in ms
  5. */
  6. function delay(callback, timeout) {
  7. const start = time.now();
  8. const checkElapsed = ({ timestamp }) => {
  9. const elapsed = timestamp - start;
  10. if (elapsed >= timeout) {
  11. cancelFrame(checkElapsed);
  12. callback(elapsed - timeout);
  13. }
  14. };
  15. frame.read(checkElapsed, true);
  16. return () => cancelFrame(checkElapsed);
  17. }
  18. function delayInSeconds(callback, timeout) {
  19. return delay(callback, secondsToMilliseconds(timeout));
  20. }
  21. export { delay, delayInSeconds };