util.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import $ from 'jquery';
  2. const Util = (($) => { // eslint-disable-line no-shadow
  3. const TRANSITION_END = 'transitionend';
  4. const Util = { // eslint-disable-line no-shadow
  5. TRANSITION_END: 'mmTransitionEnd',
  6. triggerTransitionEnd(element) {
  7. $(element).trigger(TRANSITION_END);
  8. },
  9. supportsTransitionEnd() {
  10. return Boolean(TRANSITION_END);
  11. },
  12. };
  13. function getSpecialTransitionEndEvent() {
  14. return {
  15. bindType: TRANSITION_END,
  16. delegateType: TRANSITION_END,
  17. handle(event) {
  18. if ($(event.target).is(this)) {
  19. return event
  20. .handleObj
  21. .handler
  22. .apply(this, arguments); // eslint-disable-line prefer-rest-params
  23. }
  24. return undefined;
  25. },
  26. };
  27. }
  28. function transitionEndEmulator(duration) {
  29. let called = false;
  30. $(this).one(Util.TRANSITION_END, () => {
  31. called = true;
  32. });
  33. setTimeout(() => {
  34. if (!called) {
  35. Util.triggerTransitionEnd(this);
  36. }
  37. }, duration);
  38. return this;
  39. }
  40. function setTransitionEndSupport() {
  41. $.fn.mmEmulateTransitionEnd = transitionEndEmulator; // eslint-disable-line no-param-reassign
  42. // eslint-disable-next-line no-param-reassign
  43. $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
  44. }
  45. setTransitionEndSupport();
  46. return Util;
  47. })($);
  48. export default Util;