Первый плагин
Комом...
Для начала давайте вспомним, для чего нам нужны плагины? Мой ответ — для создания повторно используемого кода, причём с удобным интерфейсом. Давайте напишем такой код, начнём с простой задачки:
— По клику на параграф текст должен измениться на красный
JavaScript и даже не jQuery
Дабы не забывать истоки, начнём с реализации на нативном JavaScript:
Данный код не является универсальным и написан с целью лишний раз подчеркнуть удобство использования jQuery ;)
jQuery, но ещё не плагин
Теперь можно этот код упростить, подключаем jQuery и получаем следующий вариант:
Таки jQuery-плагин
С поставленной задачей мы справились, но где тут повторное использование кода? Или если нам надо не в красный, а в зеленый перекрасить? Вот тут начинается самое интересное. Чтобы написать простой плагин, достаточно расширить объект $.fn
:
Если же писать более грамотно, то нам необходимо ограничить переменную $
только нашим плагином, а также возвращать this
, чтобы можно было использовать цепочки вызовов (т.н. «chaining»). Делается это следующим образом:
Внесу небольшое пояснение о происходящей тут «магии». Код (function($){…})(jQuery)
создает анонимную функцию и тут же вызывает её, передавая в качестве параметра объект jQuery
. Таким образом внутри анонимной функции мы можем использовать алиас $
, не боясь за конфликты с другими библиотеками, так как теперь $
находится лишь в области видимости нашей функции и мы имеем полный контроль над ней. Если у вас возникло ощущение дежавю – то всё верно, я об этом уже рассказывал.
Добавим опцию по выбору цвета и получим рабочий плагин:
Вызов:
В результате работы данного плагина каждый клик будет изменять цвет параграфа на красный. Та как мы используем глобальную переменную для хранения настроек, то второй вызов плагина изменит значение для всех элементов:
Можно внести небольшие изменения и разделить настройки для каждого вызова:
А разница-то в одном «var». Мне даже сложно себе представить, как много часов убито в поисках потерянного «var» в JavaScript. Будьте внимательны:
Работаем с коллекциями объектов
Тут всё просто, достаточно запомнить — this
содержит jQuery-объект с коллекцией всех элементов, т.е.:
Если мы хотим обрабатывать каждый элемент, то соорудим следующую конструкцию внутри нашего плагина:
Опять же напомню, если ваш плагин не должен что-то возвращать по вашей задумке — возвращайте this
. Цепочки вызовов в jQuery это часть магии, не стоит её разрушать. Методы each()
и click()
возвращают объект jQuery.
Публичные методы
Так, у нас написан «крутой» плагин, надо бы ему ещё докрутить функционала – пусть цвет регулируется несколькими кнопками на сайте. Для этого нам понадобится некий метод color
, который и будет в ответе за всё. Сейчас приведу пример кода готового плагина — будем курить вместе (обращайте внимание на комментарии):
Теперь ещё небольшой пример использования данных методов:
Для понимания данного кусочка кода вы должны разобраться лишь с переменной arguments
и методом apply()
. Тут им целые статьи посвятили, дерзайте:
Об обработчиках событий
Если ваш плагин вешает какой-либо обработчик, то лучше всего (читай – всегда) данный обработчик повесить в своём собственном namespace:
Данный финт позволит в любой момент убрать все ваши обработчики или вызвать только ваш, что очень удобно:
— Дежавю? Ок!
Дам ещё чуток информации к размышлению, но на английском:
На этом об обычных плагинах всё. Всем спасибо за внимание.
Last updated