Учусь писать свои плагины для Jquery. В частности слайдер. Вот что пока есть:
(function($){
// настройки со значением по умолчанию
var defaults = { speed: 500 };
// наши будущие публичные методы
var methods = {
xDown: null,
yDown: null,
// инициализация плагина
init: function(options, args ) {
// настройки, будут индивидуальными при каждом запуске
var options = $.extend({}, defaults, options);
// инициализируем лишь единожды
if (!this.data('sSlider')) {
this.data('sSlider', options);
// добавим событий
var slider = this;
$(document)
.on('click', '*[data-direction]', function(e){
e.preventDefault();
methods.move( this, $(this).data('direction'), options );
});
}
return this;
},
// контейнер со слайдами
move: function( slider, direction, options ) {
var slider = $(slider),
block = slider.find('*[data-element="box"]'),
items = block.children(),
first = items.eq(0);
last = items.eq(-1);
console.log( methods.init );
if( first.is( ':animated' ) ) {
return;
}
items.stop(true, true);
if ( direction === 'prev' ) {
first.animate({
marginLeft: 0 - first.outerWidth()
}, options.speed, function() {
first.css('margin-left', 0)
.appendTo( first.parent() );
});
} else {
last.prependTo(last.parent())
.css('margin-left','-'+last.outerWidth()+'px')
.animate({marginLeft:0}, options.speed);
}
},
};
$.fn.sSlider = function(method){
// немного магии
console.log(this);
if ( methods[method] ) {
// если запрашиваемый метод существует, мы его вызываем
// все параметры, кроме имени метода прийдут в метод
// this так же перекочует в метод
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
// если первым параметром идет объект, либо совсем пусто
// выполняем метод init
console.log( this );
return methods.init.apply( this, arguments );
} else {
// если ничего не получилось
$.error('Method "' + method + '" not found');
}
};
})(jQuery);
$('.glider').sSlider();
Застопорился в методе move. Я пытаюсь обратиться к родительскому блоку .glider, который заявлен в $('.glider').sSlider(); Но в методе move: function( slider, direction, options ), параметре slider какая-то дичь. Я не могу получить к нему доступ, чтобы обратиться к дочерним. Надеюсь на любую помощь.