You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Event.js 3.5 KiB

3 vuotta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var START_EVENT_NAME_MAP = {
  6. transitionstart: {
  7. transition: 'transitionstart',
  8. WebkitTransition: 'webkitTransitionStart',
  9. MozTransition: 'mozTransitionStart',
  10. OTransition: 'oTransitionStart',
  11. msTransition: 'MSTransitionStart'
  12. },
  13. animationstart: {
  14. animation: 'animationstart',
  15. WebkitAnimation: 'webkitAnimationStart',
  16. MozAnimation: 'mozAnimationStart',
  17. OAnimation: 'oAnimationStart',
  18. msAnimation: 'MSAnimationStart'
  19. }
  20. };
  21. var END_EVENT_NAME_MAP = {
  22. transitionend: {
  23. transition: 'transitionend',
  24. WebkitTransition: 'webkitTransitionEnd',
  25. MozTransition: 'mozTransitionEnd',
  26. OTransition: 'oTransitionEnd',
  27. msTransition: 'MSTransitionEnd'
  28. },
  29. animationend: {
  30. animation: 'animationend',
  31. WebkitAnimation: 'webkitAnimationEnd',
  32. MozAnimation: 'mozAnimationEnd',
  33. OAnimation: 'oAnimationEnd',
  34. msAnimation: 'MSAnimationEnd'
  35. }
  36. };
  37. var startEvents = [];
  38. var endEvents = [];
  39. function detectEvents() {
  40. var testEl = document.createElement('div');
  41. var style = testEl.style;
  42. if (!('AnimationEvent' in window)) {
  43. delete START_EVENT_NAME_MAP.animationstart.animation;
  44. delete END_EVENT_NAME_MAP.animationend.animation;
  45. }
  46. if (!('TransitionEvent' in window)) {
  47. delete START_EVENT_NAME_MAP.transitionstart.transition;
  48. delete END_EVENT_NAME_MAP.transitionend.transition;
  49. }
  50. function process(EVENT_NAME_MAP, events) {
  51. for (var baseEventName in EVENT_NAME_MAP) {
  52. if (EVENT_NAME_MAP.hasOwnProperty(baseEventName)) {
  53. var baseEvents = EVENT_NAME_MAP[baseEventName];
  54. for (var styleName in baseEvents) {
  55. if (styleName in style) {
  56. events.push(baseEvents[styleName]);
  57. break;
  58. }
  59. }
  60. }
  61. }
  62. }
  63. process(START_EVENT_NAME_MAP, startEvents);
  64. process(END_EVENT_NAME_MAP, endEvents);
  65. }
  66. if (typeof window !== 'undefined' && typeof document !== 'undefined') {
  67. detectEvents();
  68. }
  69. function addEventListener(node, eventName, eventListener) {
  70. node.addEventListener(eventName, eventListener, false);
  71. }
  72. function removeEventListener(node, eventName, eventListener) {
  73. node.removeEventListener(eventName, eventListener, false);
  74. }
  75. var TransitionEvents = {
  76. // Start events
  77. startEvents: startEvents,
  78. addStartEventListener: function addStartEventListener(node, eventListener) {
  79. if (startEvents.length === 0) {
  80. window.setTimeout(eventListener, 0);
  81. return;
  82. }
  83. startEvents.forEach(function (startEvent) {
  84. addEventListener(node, startEvent, eventListener);
  85. });
  86. },
  87. removeStartEventListener: function removeStartEventListener(node, eventListener) {
  88. if (startEvents.length === 0) {
  89. return;
  90. }
  91. startEvents.forEach(function (startEvent) {
  92. removeEventListener(node, startEvent, eventListener);
  93. });
  94. },
  95. // End events
  96. endEvents: endEvents,
  97. addEndEventListener: function addEndEventListener(node, eventListener) {
  98. if (endEvents.length === 0) {
  99. window.setTimeout(eventListener, 0);
  100. return;
  101. }
  102. endEvents.forEach(function (endEvent) {
  103. addEventListener(node, endEvent, eventListener);
  104. });
  105. },
  106. removeEndEventListener: function removeEndEventListener(node, eventListener) {
  107. if (endEvents.length === 0) {
  108. return;
  109. }
  110. endEvents.forEach(function (endEvent) {
  111. removeEventListener(node, endEvent, eventListener);
  112. });
  113. }
  114. };
  115. exports['default'] = TransitionEvents;
  116. module.exports = exports['default'];