Первый плагин
Комом...
Для начала давайте вспомним, для чего нам нужны плагины? Мой ответ — для создания повторно используемого кода, причём с удобным интерфейсом. Давайте напишем такой код, начнём с простой задачки:
— По клику на параграф текст должен измениться на красный
JavaScript и даже не jQuery
Дабы не забывать истоки, начнём с реализации на нативном JavaScript:
// завернём всё в функцию
let loader = function () {
// находим все параграфы
let paragraphs = document.getElementsByTagName('P');
// перебираем всё и вешаем обработчик
for (let i = 0; i < paragraphs.length; i++) {
// собственно обработчик
paragraphs[i].onclick = function() {
this.style.color = "#FF0000";
}
}
}
// естественно, весь код должен работать после загрузки всей страницы
document.addEventListener("DOMContentLoaded", loader);Данный код не является универсальным и написан с целью лишний раз подчеркнуть удобство использования jQuery ;)
jQuery, но ещё не плагин
Теперь можно этот код упростить, подключаем jQuery и получаем следующий вариант:
Таки jQuery-плагин
С поставленной задачей мы справились, но где тут повторное использование кода? Или если нам надо не в красный, а в зеленый перекрасить? Вот тут начинается самое интересное. Чтобы написать простой плагин, достаточно расширить объект $.fn:
Если же писать более грамотно, то нам необходимо ограничить переменную $ только нашим плагином, а также возвращать this, чтобы можно было использовать цепочки вызовов (т.н. «chaining»). Делается это следующим образом:
Добавим опцию по выбору цвета и получим рабочий плагин:
Вызов:
В результате работы данного плагина каждый клик будет изменять цвет параграфа на красный. Та как мы используем глобальную переменную для хранения настроек, то второй вызов плагина изменит значение для всех элементов:
Можно внести небольшие изменения и разделить настройки для каждого вызова:
А разница-то в одном «var». Мне даже сложно себе представить, как много часов убито в поисках потерянного «var» в JavaScript. Будьте внимательны:
Работаем с коллекциями объектов
Тут всё просто, достаточно запомнить — this содержит jQuery-объект с коллекцией всех элементов, т.е.:
Если мы хотим обрабатывать каждый элемент, то соорудим следующую конструкцию внутри нашего плагина:
Опять же напомню, если ваш плагин не должен что-то возвращать по вашей задумке — возвращайте this. Цепочки вызовов в jQuery это часть магии, не стоит её разрушать. Методы each() и click() возвращают объект jQuery.
Публичные методы
Так, у нас написан «крутой» плагин, надо бы ему ещё докрутить функционала – пусть цвет регулируется несколькими кнопками на сайте. Для этого нам понадобится некий метод color, который и будет в ответе за всё. Сейчас приведу пример кода готового плагина — будем курить вместе (обращайте внимание на комментарии):
Теперь ещё небольшой пример использования данных методов:
Для понимания данного кусочка кода вы должны разобраться лишь с переменной arguments и методом apply(). Тут им целые статьи посвятили, дерзайте:
Об обработчиках событий
Если ваш плагин вешает какой-либо обработчик, то лучше всего (читай – всегда) данный обработчик повесить в своём собственном namespace:
Данный финт позволит в любой момент убрать все ваши обработчики или вызвать только ваш, что очень удобно:
— Дежавю? Ок!
На этом об обычных плагинах всё. Всем спасибо за внимание.
Last updated