EventDispatcher.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /**
  2. * https://github.com/mrdoob/eventdispatcher.js/
  3. */
  4. class EventDispatcher {
  5. addEventListener( type, listener ) {
  6. if ( this._listeners === undefined ) this._listeners = {};
  7. const listeners = this._listeners;
  8. if ( listeners[ type ] === undefined ) {
  9. listeners[ type ] = [];
  10. }
  11. if ( listeners[ type ].indexOf( listener ) === - 1 ) {
  12. listeners[ type ].push( listener );
  13. }
  14. }
  15. hasEventListener( type, listener ) {
  16. if ( this._listeners === undefined ) return false;
  17. const listeners = this._listeners;
  18. return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;
  19. }
  20. removeEventListener( type, listener ) {
  21. if ( this._listeners === undefined ) return;
  22. const listeners = this._listeners;
  23. const listenerArray = listeners[ type ];
  24. if ( listenerArray !== undefined ) {
  25. const index = listenerArray.indexOf( listener );
  26. if ( index !== - 1 ) {
  27. listenerArray.splice( index, 1 );
  28. }
  29. }
  30. }
  31. dispatchEvent( event ) {
  32. if ( this._listeners === undefined ) return;
  33. const listeners = this._listeners;
  34. const listenerArray = listeners[ event.type ];
  35. if ( listenerArray !== undefined ) {
  36. event.target = this;
  37. // Make a copy, in case listeners are removed while iterating.
  38. const array = listenerArray.slice( 0 );
  39. for ( let i = 0, l = array.length; i < l; i ++ ) {
  40. array[ i ].call( this, event );
  41. }
  42. event.target = null;
  43. }
  44. }
  45. }
  46. export { EventDispatcher };
粤ICP备19079148号