-
-
Save yokotak0527/eeca3d7f7400dfe49359 to your computer and use it in GitHub Desktop.
簡易イベント管理
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
!function(app){ | |
let instance = null; | |
let listener = {}; | |
let callback = {}; | |
let nonameListener = 'event'; | |
let nonameListenerNum = 0; | |
class Event{ | |
constructor(){ | |
if(instance) return instance; | |
} | |
// =========================================================================== | |
// イベントの追加 | |
// =========================================================================== | |
attachEvent(name,cb){ | |
if(callback[name]){ | |
console.log(`'${name}' event is already defined...`); | |
return | |
} | |
callback[name] = cb; | |
listener[name] = listener[name] || {}; | |
} | |
// =========================================================================== | |
// イベントの削除 | |
// =========================================================================== | |
detachEvent(name){ | |
if(!callback[name]) return; | |
delete callback[name]; | |
delete listener[name]; | |
} | |
// =========================================================================== | |
// リスナーの追加 | |
// =========================================================================== | |
addEventListener(name,label,callback){ | |
if(!callback){ | |
callback = label; | |
label = nonameListener+nonameListenerNum; | |
nonameListenerNum++; | |
} | |
listener[name] = listener[name] || {}; | |
if(listener[name][label]){ | |
console.log(`${name} event listener '${label}' is already existed...`); | |
return; | |
} | |
listener[name][label] = callback; | |
return {event:name,label:label}; | |
} | |
// =========================================================================== | |
// リスナーの削除 | |
// =========================================================================== | |
removeEventListener(name,label){ | |
if(!listener[name]) return | |
if(label) delete listener[name][label]; | |
else delete listener[name]; | |
} | |
// =========================================================================== | |
// イベントの発火 | |
// =========================================================================== | |
dispatch(name,eventArgs = {}){ | |
if(callback[name]){ | |
let addArgs = callback[name](eventArgs); | |
addArgs = typeof addArgs === 'object' ? addArgs : {}; | |
let keys = Object.keys(addArgs); | |
for(let i = 0,l = keys.length; i<l; i++){ | |
let key = keys[i]; | |
eventArgs[key] = addArgs[key]; | |
} | |
for(let key in listener[name]) listener[name][key](eventArgs); | |
} | |
} | |
// =========================================================================== | |
// instanceの取得 | |
// =========================================================================== | |
static getInstance(){ | |
return instance; | |
} | |
} | |
app.class['Event'] = Event; | |
}(window.app) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment