Показать сообщение отдельно
  #1 (permalink)  
Старый 23.04.2020, 17:09
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Что не так с плагином
Учусь писать свои плагины для 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 какая-то дичь. Я не могу получить к нему доступ, чтобы обратиться к дочерним. Надеюсь на любую помощь.

Последний раз редактировалось Янковиц, 23.04.2020 в 17:11.
Ответить с цитированием