; (function ($) { var settings = {}; $.fn.Slides = function (options) { var that = this; var id = $(this).attr('id'); settings[id] = $.extend({}, $.fn.Slides.defaults, options || {}); $.fn.Slides.init(that, settings[id], function () { return that.each(function () { $.fn.Slides.start(id); }); }); }; $.fn.Slides.defaults = { wait: 0, pause: 6000, fade: 1000 }; $.fn.Slides.init = function (target, settings, callback) { if (typeof settings.images === 'undefined') throw Error('Image array is not optional must be passed in the call $("#id").Slides({images : ["img1.jpg", "img2.jpg"]})'); if (typeof settings.urls != 'undefined' && (settings.urls.length != settings.images.length)) throw Error('Urls length must match images length'); if (typeof settings.functions != 'undefined' && (settings.functions.length != settings.images.length)) throw Error('Functions length must match images length'); settings = $.extend(settings, { main: $(target), pipes: { urls: [], functions: [] }, initialized: false }); var initWrapper = function () { settings.toggle = settings.main.wrap('<span></span>').parent().css({ display: 'block', overflow: 'hidden', height: settings.main.height() + 'px', width: settings.main.width() + 'px' }); $.fn.Slides.preloadNextImage(settings); settings.initialized = true; }; settings.main.load(function () { if (settings.initialized) return; initWrapper(); callback(); }); if (settings.main[0].complete && !settings.initialized) { initWrapper(); callback(); } }; $.fn.Slides.preloadNextImage = function (settings) { var nextImage = $.fn.Slides.getNextImage(settings); var image = new Image(); image.src = nextImage; settings.nextImage = image; }; $.fn.Slides.getNextImage = function (settings) { var nextImage = settings.images.shift(); settings.images.push(nextImage); if (settings.urls) { var url = settings.urls.shift(); settings.urls.push(url); settings.pipes.urls.push(url); } if (settings.functions) { var func = settings.functions.shift(); settings.functions.push(func); settings.pipes.functions.push(func); } return nextImage; }; $.fn.Slides.start = function (id) { setTimeout(function () { $.fn.Slides.execute(id); }, settings[id].wait); }; $.fn.Slides.execute = function (id) { var _settings = settings[id]; _settings.isToggle = false; setInterval(function () { if (_settings.isToggle) { _settings.main.attr('src', _settings.nextImage.src).animate({ opacity: 1 }, _settings.fade); _settings.isToggle = false; } else { _settings.toggle.css({ background: 'transparent url(' + _settings.nextImage.src + ') left top no-repeat' }); _settings.main.animate({ opacity: 0 }, _settings.fade); _settings.isToggle = true; } if (_settings.pipes.urls.length > 0) { _settings.main.click(function () { window.location.href = _settings.pipes.urls.shift(); }); } if (_settings.pipes.functions.length > 0) _settings.pipes.functions.shift()(); $.fn.Slides.preloadNextImage(_settings); }, _settings.pause); }; })(jQuery);
