Я бы порекомендовал модель очереди сообщений.Имейте центральный MessageQueue, который принимает события и уведомляет слушателей.Объекты, которые хотят что-то сделать при определенных нажатиях клавиш, могут зарегистрироваться в качестве слушателей в очереди и будут уведомлены, когда произойдет то, о чем они заботятся.
Допустим, у вас есть предопределенный набор событий «UP»,События «ВНИЗ», «ВЛЕВО» и «ВПРАВО».
var MESSAGE_QUEUE = function() {
var eventListeners = {
UP: [],
DOWN: [],
LEFT: [],
RIGHT: []
};
return {
register: function(event, obj) {
var listeners = eventListeners[event];
if (listeners) {
listeners.push(obj);
}
},
fire: function(event) {
var listeners = eventListeners[event] || [];
for (var i=0; i<listeners.length; i++) {
listeners[i].onEvent(event);
}
}
};
}();
Тогда объект, который хочет получить уведомление о ВНИЗ, говорит:
MESSAGE_QUEUE.register("DOWN", this);
this
определить onEvent
функцию.Тогда все, что запускает ключевые события:
element.onKeyPress = function(event) {
// ... figure out if down was presses
MESSAGE_QUEUE.fire("DOWN");
}
Нечто подобное будет чистым решением.Очевидно, что это можно изменить в соответствии с вашими потребностями, такими как переменное число событий или более понятные имена функций, такие как onDown
, onUp
и т. Д., Определенные для каждого слушателя.