raf.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. var now = require('./now');
  2. var isBrowser = require('./isBrowser');
  3. var raf, cancel;
  4. var lastTime = 0;
  5. if (isBrowser) {
  6. raf = window.requestAnimationFrame;
  7. cancel = window.cancelAnimationFrame;
  8. var vendors = ['ms', 'moz', 'webkit', 'o'];
  9. for (var i = 0, len = vendors.length; i < len && !raf; i++) {
  10. raf = window[vendors[i] + 'RequestAnimationFrame'];
  11. cancel =
  12. window[vendors[i] + 'CancelAnimationFrame'] ||
  13. window[vendors[i] + 'CancelRequestAnimationFrame'];
  14. }
  15. if (raf) {
  16. raf = raf.bind(window);
  17. cancel = cancel.bind(window);
  18. }
  19. }
  20. raf =
  21. raf ||
  22. function(cb) {
  23. var curTime = now();
  24. var timeToCall = Math.max(0, 16 - (curTime - lastTime));
  25. var id = setTimeout(function() {
  26. cb(curTime + timeToCall);
  27. }, timeToCall);
  28. lastTime = curTime + timeToCall;
  29. return id;
  30. };
  31. cancel =
  32. cancel ||
  33. function(id) {
  34. clearTimeout(id);
  35. };
  36. raf.cancel = cancel;
  37. exports = raf;
  38. module.exports = exports;