jQuery.fn.newsLine = function(options) { var defaults = { itemsSelector: '.item', arrowLeftSelector: '.arr-left', arrowRightSelector: '.arr-right' }; var settings = $.extend(false, defaults, options); return this.each( function() { var elem = $(this), api = elem.data('newsLine'); if (api) { } else { api = new NewsLine(this, settings); elem.data('newsLine', api); } } ); } function NewsLine(wrapper, settings) { this.init(wrapper, settings); }; NewsLine.prototype = { targetObject: false, banners: false, settings: false, navPrev: false, navNext: false, count: 0, current: 0, tmout: 4000, timer: false, init: function(wrapper, settings) { var context = this; this.targetObject = $(wrapper); this.settings = settings; this.banners = $(this.settings.itemsSelector, this.targetObject); this.navPrev = $(this.settings.arrowLeftSelector, this.targetObject); this.navNext = $(this.settings.arrowRightSelector, this.targetObject); this.current = 1; this.count = this.banners.length; var first = $(this.settings.itemsSelector+':first', this.targetObject); first.show(); this.initActions(); // this.checkLimits(); /*if (this.banners.length > 1) { this.startRotation(); }*/ }, /*startRotation: function() { var context = this; this.timer = setTimeout(function(){ context.slideNext(); context.startRotation(); }, this.tmout); }, stopRotation: function () { if (this.timer) clearTimeout(this.timer); }, restartRotation: function() { this.stopRotation(); this.startRotation(); },*/ initActions: function() { var context = this; this.navPrev.click(function(){ context.slidePrev(); // context.restartRotation(); return false; }); this.navNext.click(function(){ context.slideNext(); // context.restartRotation(); return false; }); }, slideNext: function() { var cur = this.getCurrent(); /*if (!cur.length) this.stopRotation();*/ var next = this.getNext(); if (cur.length && next.length) { cur.hide('slide', {direction: 'left', easing:'easeOutCubic'}, 1000); next.show('slide', {direction: 'right', easing:'easeOutCubic'}, 1000); } }, slidePrev: function() { var cur = this.getCurrent(); var prev = this.getPrev(); if (cur.length && prev.length) { cur.hide('slide', {direction: 'right', easing:'easeOutCubic'}, 1000); prev.show('slide', {direction: 'left', easing:'easeOutCubic'}, 1000); } }, getCurrent: function() { var cur = $(this.settings.itemsSelector+':visible', this.targetObject); return cur; }, getPrev: function() { var cur = this.getCurrent(); var prev = cur.prev(this.settings.itemsSelector); if (!prev.length) prev = $(this.settings.itemsSelector+':last', this.targetObject); return prev; }, getNext: function() { var cur = this.getCurrent(); var next = cur.next(this.settings.itemsSelector); if (!next.length) next = $(this.settings.itemsSelector+':first', this.targetObject); return next; }, checkLimits: function() { if (this.current == 1) this.navPrev.hide(); else this.navPrev.show(); if (this.current == this.count) this.navNext.hide(); else this.navNext.show(); }, fireCallback: function(fn) { if($.isFunction(fn)) { fn.call(this); }; //this.fireCallback(this.settings.onstart); } }