714
 

Как создать плагин для jQuery

jQuery

Чаще всего мне приходится писать скрипты под jQuery, и иногда очень удобно реализовывать функциональность путем создания плагина. В этой статье я покажу как это можно сделать. Пример будет тривиальный, но надеюсь понятный. Фунцкиональнось учебного плагина аналогична hover эффекту – при наведении указателя мыши на элемент, его фон меняется, если убрать указатель, то фон меняется на первоначальный (этого можно достичь при помощи CSS, но не забывайте, что это всего-лишь пример).

В основе библиотеки jQuery лежит класс с аналогичным названием jQuery (у него есть псевдоним $). Подобно тому, как классы в JavaScript можно расширять, используя свойство prototype, точно также мы можем расширить функциональность класса jQuery. Именно таким образом и создаются плагины. Поскольку в jQuery для свойства prototype есть псевдоним fn, то он чаще всего и используется для этой цели.

Наш плагин начинаем следующим образом:

(function($){
    $.fn.backgroundHover = function(options) {
       return this.each(function () {
          // Код плагина
       });
    };
})(jQuery);

Первая и последняя строка этого блока представляют собой вызов анонимной функции, единственным аргументом которого будет объект jQuery. В результате, мы получим еще одну область определения переменных (scope), то есть, все переменные и функции, объявленные внутри этой анонимной функции будут недоступны извне (не распространяются на глобальную область видимости window). Поскольку плагин выполняет действия над некоторым множеством элементов DOM в одном вызове, то мы должны обрабатывать все эти элементы в одном цикле. Это делается при помощи функции each в строке 3.

Все плагины способны принимать некоторое количество параметров, выполним эту функциональность следующим образом:

$.fn.backgroundHover = function(options) {
      options = $.extend({
         background: 'red',
      }, options);

Все параметры хранятся в переменной options. Для инициализации этой переменной мы используем фунцию $.extend(), первым аргументом которой указываем объект, с параметрами по умолчанию, второй аргумент – параметры, указанные пользователем. В нашем случае, имеем всего лишь один параметр – цвет фона (background), по умолчанию он имеет значение red.

Ну и последний шаг – добавляем функциональность плагина внутрь функции each:

var self = $(this);
   self.mouseover(function() {
      self.oldBG = self.css('backgroundColor');
      self.css('backgroundColor',options.background);
   });

   self.mouseout(function() {
      self.css('backgroundColor',self.oldBG);
   });

В первой строке мы создаем переменную self, которая будет ссылаться на текущий элемент DOM. Для всех выбранных элементов будут добавлены два обработчика событий – mouseover и mouseout, которые будут менять цвет фона в соответсвии с параметром options.background.

На этом создание плагина закончено, используется он следующим образом:

$('.someNodes').backgroundHover({background: "#fce"});

Исходный код плагина можно посмотреть здесь: background.jquery.js.

Демо примерИсточник

Добавить в закладки:
Maklay.com - Большой каталог товаров для спорта и активного отдыха

Комментарии на “Как создать плагин для jQuery”

  1. Если быть точным, то jQuery.fn.init.prototype – это ссылка на jQuery.fn.
    Расширяя jQuery.fn мы расширяем jQuery.fn.init.prototype :)

  2. Думаю разницы нет никакой ))
    jQuery.prototype = jQuery.fn = jQuery.fn.init.prototype
    Два последних объекта созданы как псевдонимы, но по сути основным является jQuery.prototype. Я честно признаюсь, не совсем понимаю зачем последний алиас создается (jQuery.fn.init.prototype). Комментарий в исходнике мне ни о чем не говорит (Give the init function the jQuery prototype for later instantiation) :)

  3. А я поспорю ))
    На мой взгляд jQuery.prototype можно выкинуть вообще, jQuery.fn рулит в человекопонимании. Этот же jQuery.prototype, если не ошибаюсь, нигде больше не фигурирует.
    А jQuery.fn.init.prototype – это “сундучок” методов для строки 19 в jQuery 1.4pre :)
    Кстати, отличный блог, пиши в него почаще :)
    Всё свой блог о JS верстаю, верстаю, да не как не выверстаю :)

  4. jQuery.prototype выкинуть никак не получится, ведь это часть языка JavaScript на основе которой расширяются классы, а jQuery.fn сделан всего лишь для кратости, потому он везде и используется.
    Как свой блог сверстаешь, поделись плиз ссылочкой :)

  5. Ок)
    jQuery.fn = jQuery.prototype = {} успешно заменяется на jQuery.fn = {} – всё отлично работает :) Таким образом jQuery.prototype на мой взгляд несёт только смысловую нагрузку при назначении “сундучка методов”, его можно не использовать. Вобщем это уже разговоры не на ту тему, хотя это всё довольно интересно)
    Если что, вот аська 495209321 :)

Оставить комментарий

JSToolbox создан на основе WordPress