EventDispatcher.js 1.5 KB

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