Poiché la risposta @rsp risolve correttamente il problema di slegare il gestore corretto, in realtà non risponde al problema del namespace. Per gestire questo si avrebbe bisogno di fare un po 'più di codifica in questo modo:
function on(elm, evtName, handler) {
evtName.split('.').reduce(function(evtPart, evt) {
evt = evt ? evt +'.'+ evtPart : evtPart;
elm.addEventListener(evt, handler, true);
return evt;
}, '');
}
function off(elm, evtName, handler) {
evtName.split('.').reduce(function(evtPart, evt) {
evt = evt ? evt +'.'+ evtPart : evtPart;
elm.removeEventListener(evt, handler, true);
return evt;
}, '');
}
// Your handler
function onScroll(e) { ... }
// To bind it
on(window, 'scroll.myScrollNamespace', onScroll);
// To unbind it
off(window, 'scroll.myScrollNamespace', onScroll);
Quindi per riassumere: questo imposta in realtà diversi listener di eventi - uno per ogni parte della vostra namespacing. Questa funzionalità purtroppo non è supportata in modo nativo, ma come puoi vedere può essere realizzata in modo relativamente semplice. Basta essere cauti sul fatto che anche se questo script supporta il deep namespacing (ad esempio scroll.parent.child
) legherebbe molti ascoltatori di eventi (3 in questo caso), e quindi è sconsigliabile.
Si potrebbe fare questo più performante, ma questo è fatto.