Расширяем стандартные события jQuery

Я уже писал о том, как можно создавать обработчики “своих” событий, теперь хочу немного пролить света на возможности навешивания хуков на существующие события jQuery.

Многие знают, что у объекта jQuery есть свойство jQuery.event, но при этом мало кто знает, что у этого объекта jQuery.event есть свойство jQuery.event.fixHooks. На этом свойстве и основан алгоритм jQuery-хуков.

fixHooks – это объект хуков к событиям, где ключом является имя события, например:

[javascript]
jQuery.event.fixHooks.click = {
//…
};
[/javascript]

Фактически интерфейс fixHooks предоставляет возможность расширить или нормализовать объект event (который jQuery создает в процессе обработки родного браузерного объекта события) для каждого события отдельно.

Каждый объект fixHooks может содержать в себе 2 свойства:

  • props – объект – дополнительные свойства, которые будут скопированны из бразерного объекта event
  • filter  – функция c синтаксисом function ( event, originalEvent ) – которая будет вызвана после создания события jQuery(что и будет первым аргументом). Второй аргумент originalEvent – браузерное событие. Функция должна вернуть событие jQuery.

Пример (добавление и фикс свойства orientation):

[javascript]
jQuery.event.fixHooks.orientationchange = jQuery.event.fixHooks.resize = {
props: ["orientation"],
filter: function normalizeOrientation(event, original) {
if (event.orientation) {
if ([0, "0", 180, "180", "portrait"].indexOf(event.orientation)) {
event.orientation = "portrait";
}
else {
event.orientation = "landscape";
}
}
else {
var win = jQuery(window);
event.orientation = win.width() > win.height() ? "landscape" : "portrait";
}
return event;
}
}
[/javascript]

Живой пример тут.

Более подробно можно почитать официальную документацию спрятанную тут.