Guest User

Untitled

a guest
Feb 21st, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. /**
  2. * @callback whenCallback
  3. *
  4. * @param {HTMLElement} element - The element polled for
  5. */
  6.  
  7. /**
  8. * Polls for an element until dom ready
  9. * and executes a callback when the element(s) is/are found
  10. * Note: Runs at least once even if dom ready
  11. *
  12. * @param {string} selector - The element selector to poll for
  13. * @param {whenCallback} callback - Callback when element found
  14. * @param {number} [interval=50] - Polling interval in milliseconds
  15. *
  16. * @example
  17. *
  18. * when('.target-class', targetElement => {
  19. * // Do something with targetElement
  20. * });
  21. */
  22. export default function when(selector, callback, interval = 50) {
  23. const elements = document.querySelectorAll(selector);
  24.  
  25. // If element found, call callback
  26. if (elements.length) return callback(elements);
  27.  
  28. // If element not found by dom ready, exit
  29. if (document.readyState === 'complete') return;
  30.  
  31. // Else, try again
  32. const next = when.bind(null, selector, callback, interval);
  33. return setTimeout(next, interval);
  34. }
Add Comment
Please, Sign In to add comment