Creación de Plugins jQuery (Slider by Cristian Torres)
Publicado el 12 de junio de 2013 por Cristian Torres
(function ($) {
$.tSlider = function (container, options) { this.options = {};
this.context = container.parent(); container.css('position', 'relative'); this.child = container.children(); this.page = null; this.pages = []; this.current = 0; this.interval = null; var plugin = this;
container.data('slider', plugin);
this.next = function () { plugin.current++; if (plugin.current >= $('.pointer', plugin.context).size()) plugin.current = 0; plugin.moveTo(plugin.current); }
this.prev = function () { plugin.current--; if (plugin.current < 0) plugin.current = $('.pointer', plugin.context).size() - 1; plugin.moveTo(plugin.current); }
this.moveTo = function (index) { clearInterval(plugin.interval); $('.page.current', plugin.context) .fadeOut() .toggleClass('current'); $('.page', plugin.context).eq(index) .toggleClass('current') .fadeIn(); $('.pointer.current', plugin.context) .toggleClass('current'); $('.pointer', plugin.context).eq(index) .toggleClass('current'); plugin.interval = setInterval(plugin.next, options.autoPlay.interval); }
this.init = function (element, options) { this.options = $.extend({}, $.tSlider.optionsDefault, options); var pagination = $('<ul></ul>').addClass(options.pagination.className); if ((this.child.length / options.pageSize) > 1) { this.child.each(function (i, v) { if (i % options.pageSize == 0) { var pageNumber = (i / options.pageSize + 1); var pointer = $('<li></li>') .append(options.pagination.pointer ? '' : pageNumber) .addClass('pointer'); plugin.page = $('<div></div>') .addClass('page') .css({ position: 'absolute', top: 0, left: 0, width: '100%' }); if (pageNumber == options.startPage) { plugin.page.addClass('current').css({display: 'block'}); pointer.addClass('current'); } else { plugin.page.css({display: 'none'}); } plugin.page.append($(v).css('display', 'block')); plugin.pages.push(plugin.page);
pointer.bind('click', function () { plugin.current = pageNumber - 1; plugin.moveTo(plugin.current); }); pagination.append(pointer); } else { plugin.page.append(v); } }); container.html('').append(plugin.pages).after(pagination.append($('<div class="clearFix"></div>'))); if (options.arrows != false) { var nextBtn = $('<div>' + options.arrows.right + '</div>') .addClass('next') .bind('click', this.next); var prevBtn = $('<div>' + options.arrows.left + '</div>') .addClass('prev') .bind('click', this.prev); container .after(nextBtn) .after(prevBtn); } }
if (options.autoPlay != false) { this.interval = setInterval(this.next, options.autoPlay.interval); } }
this.init(container, options); }
$.fn.tSlider = function (options) { return $(this).each(function () { (new $.tSlider($(this), options)); }); }
$.tSlider.optionsDefault = { pageSize: 4, startPage: 1, arrows: { left: '<', right: '>' }, autoPlay: { interval: 2000 }, pagination: { className: 'pagination', pointer: false } }})(jQuery);