Lil' event emitter — add a little pub/sub
EvEmitter adds publish/subscribe pattern to a browser class. It's a smaller version of Olical/EventEmitter. That EventEmitter is full featured, widely used, and great. This EvEmitter has just the base event functionality to power the event API in libraries like Isotope, Flickity, Masonry, and imagesLoaded.
// class inheritence
class MyClass extends EvEmitter {}
// mixin prototype
Object.assign( MyClass.prototype, EvEmitter.prototype );
// single instance
let emitter = new EvEmitter();
Add an event listener.
emitter.on( eventName, listener )
eventName
- String - name of the eventlistener
- Function
Remove an event listener.
emitter.off( eventName, listener )
Add an event listener to be triggered only once.
emitter.once( eventName, listener )
Trigger an event.
emitter.emitEvent( eventName, args )
eventName
- String - name of the eventargs
- Array - arguments passed to listeners
Removes all event listeners.
emitter.allOff()
// create event emitter
var emitter = new EvEmitter();
// listeners
function hey( a, b, c ) {
console.log( 'Hey', a, b, c )
}
function ho( a, b, c ) {
console.log( 'Ho', a, b, c )
}
function letsGo( a, b, c ) {
console.log( 'Lets go', a, b, c )
}
// bind listeners
emitter.on( 'rock', hey )
emitter.on( 'rock', ho )
// trigger letsGo once
emitter.once( 'rock', letsGo )
// emit event
emitter.emitEvent( 'rock', [ 1, 2, 3 ] )
// => 'Hey', 1, 2, 3
// => 'Ho', 1, 2, 3
// => 'Lets go', 1, 2, 3
// unbind
emitter.off( 'rock', ho )
emitter.emitEvent( 'rock', [ 4, 5, 6 ] )
// => 'Hey' 4, 5, 6
EvEmitter v2 uses ES6 features like for...of loops and class definition as such it supports Chrome 49+, Firefox 45+, Safari 9+, and Edge 13+.
For older browser support, use EvEmitter v1.
EvEmitter is released under the MIT License. Have at it.