最近看egret沒有監聽鍵盤事件的方法,就自己寫了一個
使用比較簡單,隻有兩個公共方法:
addListener//添加監聽
removeListener//移出監聽
class PcKeyBoardHelper {
private static _instance: PcKeyBoardHelper;
private list: Object;
private isListening: boolean = false;
public constructor() {
this.list = {};
}
public static get instance(): PcKeyBoardHelper {
if(PcKeyBoardHelper._instance == null) {
PcKeyBoardHelper._instance = new PcKeyBoardHelper();
}
return PcKeyBoardHelper._instance;
}
private add(): void {
if(this.isListening == false) {
this.isListening = true;
document.addEventListener("keydown",PcKeyBoardHelper.instance.onKeyDown);
}
}
private onKeyDown(evt): void {
console.log("evt.keyCode:" + evt.keyCode);
var target: any;
for(target in PcKeyBoardHelper.instance.list) {
var vo: KeyVo = PcKeyBoardHelper.instance.list[target];
vo.callback.call(vo.target,evt);
}
}
/**
* 注冊監聽
* @param callback 回調方法
* @param target
*/
public addListener(callback: any,target: any): void {
var temp: string = egret.getQualifiedClassName(target);
if(PcKeyBoardHelper._instance.list[temp] == null) {
var vo: KeyVo = new KeyVo(temp,target,callback);
PcKeyBoardHelper._instance.list[vo.name] = vo;
}
PcKeyBoardHelper._instance.add();
}
/**
* 移出監聽
*/
public removeListener(target: any): void {
var temp: string = egret.getQualifiedClassName(target);
if(PcKeyBoardHelper._instance.list[temp] != null) {
delete PcKeyBoardHelper._instance.list[temp];
}
this.checkCount();
}
private checkCount(): void {
for(var key in PcKeyBoardHelper._instance.list) {
return;
}
document.removeEventListener("keydown",PcKeyBoardHelper.instance.onKeyDown);
this.isListening = false;
}
}
class KeyVo {
public name: string = "";
public target: egret.DisplayObject;
public callback: Function;
public constructor(name: string,tar: any,call: any) {
this.name = name;
this.target = tar;
this.callback = call;
}
}
其中KeyVo類不是必須的,應該優化一下~~