useBuffer.js 694 B

123456789101112131415161718192021222324252627282930
  1. export default (function (callback, buffer) {
  2. var called = false;
  3. var timeout = null;
  4. function cancelTrigger() {
  5. clearTimeout(timeout);
  6. }
  7. function trigger(force) {
  8. if (!called || force === true) {
  9. if (callback() === false) {
  10. // Not delay since callback cancelled self
  11. return;
  12. }
  13. called = true;
  14. cancelTrigger();
  15. timeout = setTimeout(function () {
  16. called = false;
  17. }, buffer.value);
  18. } else {
  19. cancelTrigger();
  20. timeout = setTimeout(function () {
  21. called = false;
  22. trigger();
  23. }, buffer.value);
  24. }
  25. }
  26. return [trigger, function () {
  27. called = false;
  28. cancelTrigger();
  29. }];
  30. });