/** * jQuery.bgSwitcher v0.1b * http://rewish.org/javascript/jquery_bg_switcher * * Copyright (c) 2009 Rewish (http://rewish.org/) * * Licensed under the MIT: * [en] http://www.opensource.org/licenses/mit-license.php * [ja] http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license * * Date: * 2009-04-08 * **/ (function($) { $.fn.bgSwitcher = function(opts, callback) { /** * Options */ var opts = $.extend({ bgImages : null, interval : 5000, loopExec : true, fadeOut : false, fadeSpeed: 1000, sequence : false, seqFirst : 1, seqLast : 5, startNum : 1 }, opts); if (opts.bgImages == null) return this; /** * Sequence number */ var sequence = function() { if (!opts.sequence) return; img = opts.bgImages[0]; dot = img.lastIndexOf('.'); opts.bgImages = Array(); for (i = opts.seqFirst; i <= opts.seqLast; i++) { opts.bgImages.push(img.substr(0, dot) + i + img.substring(dot)); } } /** * Preload */ var imgPreload = function() { $(opts.bgImages).each(function(i, src) { $('').attr('src', src); }); } /** * setting CSS to Clone Element * * @param object from * @param object to */ var setCSS = function(from, to) { if (isNaN(from.css('z-index'))) from.css('z-index', 1); pos = from.position(); return to.css({ zIndex: from.css('z-index') + 10, position: 'absolute', top: pos.top, left: pos.left }); }; /** * Background switch * * @param object elem * @param string bg * @param object clone */ var bgSwitch = (callback) ? callback(elem, bg, clone) : function(elem, bg, clone) { if (opts.fadeOut) { clone.css('background-image', elem.css('background-image')).show(); elem.css('background-image', 'url('+ bg +')'); clone.fadeOut(opts.fadeSpeed); } else elem.css('background-image', 'url('+ bg +')'); }; /** * Main method */ return this.each(function(i) { sequence(); imgPreload(); var elem = $(this); var clone = (opts.fadeOut) ? setCSS(elem, elem.clone()).insertAfter(elem) : null; var num = opts.startNum - 1; var len = opts.bgImages.length; var tId = setInterval(function() { bgSwitch(elem, opts.bgImages[num], clone); num++; if (len == num) { if (opts.loopExec) num = 0; else clearInterval(tId); } }, opts.interval); }); }; })(jQuery);