Задать вопрос
@schwabsergey

Плагин jQuery. Как получить доступ к опциям плагина из метода init в методе destroy?

Пишу простенький jQuery плагин. Его суть - изменение цвета шрифта у элемента, на который он установлен. Если указан массив цветов, то цвета меняются поочередно по таймеру. Если плагин был установлен, его действие можно отменить вызовом соответствующего метода.
(function($){
    var methods = {
        init : function( options ) {
            //настройки по умолчанию
            options = $.extend({
                timerDuration: 2, //время задержки перед сменной цвета
                color: ['#c9f', '#f60', '#09f'], // массив цветов
                cycle: true // повторять изменение цветов по кругу
            }, options);

            var self = this;
            var changeColor = function () {
                var colorIndex = 0;
                var colorLength = options.color.length;
                setTimer = setTimeout(function changeColor() {
                    if($.isArray(options.color)) {
                        self.css("color", options.color[colorIndex]);
                        if (colorIndex < options.color.length - 1) {
                            colorIndex++;
                        }
                        else {
                            colorIndex = 0;
                        }
                    }
                    else{
                        self.css("color", options.color);
                    }
                    if(options.cycle === true) {
                        setTimerCycle = setTimeout(changeColor, options.timerDuration * 1000);
                    }
                    if($.isArray(options.color) && options.cycle === false) {
                        colorLength--;
                        if( colorLength > 0 ){
                            setTimerCycle = setTimeout(changeColor, options.timerDuration * 1000);
                        }
                    }
                }, options.timerDuration * 1000);
            };
           
            return this.each(changeColor);
        },

        destroy : function () {
            var self = this;
            var def = function () {
              // в этом методе нужно отменить изменения цвета и очистить таймер. Как правильно получить доступ к данным внутри метода init?
            };
            return this.each(def);
        }

    };

  jQuery.fn.changeСolor = function(method) {
      if ( methods[method] ) {
          return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
      } else if ( typeof method === 'object' || ! method ) {
          return methods.init.apply( this, arguments );
      } else {
          $.error( 'Метод с именем ' +  method + ' не существует для jQuery.changeColor' );
      }
  };

})(jQuery);

Теперь применим плагин к абзацам:
$('p').changeColor({
		timerDuration : 5,
		color : ['red','green','blue'],
	});

А теперь отменим действие плагина:
$('p').changeColor('destroy');
Проблема с реализацией метода destroy. В нем необходимо очистить таймер и вернуть исходный цвет. Подскажите как в нем можно получить доступ к опциям и данным метода init?
  • Вопрос задан
  • 439 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
abyrkov
@abyrkov
JavaScripter
Хранить в самом объекте, в data к примеру.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 14:45
25000 руб./за проект
18 дек. 2024, в 14:43
25000 руб./за проект
18 дек. 2024, в 14:22
750 руб./за проект