// ----------------------------------------------------------------------- // Eros Fratini - eros@recoding.it // jquery.showcase 2.0.1 // // 02/02/2010 - Wow, a fix about 10 minute after release.... // 02/02/2010 - Debugging and demos // 27/12/2009 - Optimized animation, added functions to pause and resume autocycling // - Tested external ease functions // 24/12/2009 - Added a lot of settings, redefine css // 21/12/2009 - Begin to write v2.0 // 27/07/2009 - Added asynchronous loading of images // 26/06/2009 - some new implementations // 19/06/2009 - standardization // 08/06/2009 - Initial sketch // // requires jQuery 1.3.x //------------------------------------------------------------------------ (function($) { $.fn.showcase = function (options) { var $container = this; // Retrieve options var opt; opt = $.extend({}, $.fn.showcase.defaults, options); if (!/images|titles/.test(opt.linksOn)) { opt.linksOn = "images"; } if (options && options.css) { opt.css = $.extend({}, $.fn.showcase.defaults.css, options.css); } if (options && options.animation) { opt.animation = $.extend({}, $.fn.showcase.defaults.animation, options.animation); if (!/horizontal-slider|vertical-slider|fade/.test(opt.animation.type)) { opt.animation.type = "horizontal-slider"; } } if (options && options.navigator) { opt.navigator = $.extend({}, $.fn.showcase.defaults.navigator, options.navigator); if (!/top-left|top-right|bottom-left|bottom-right/.test(opt.navigator.position)) { opt.navigator.position = "top-right"; } if (!/horizontal|vertical/.test(opt.navigator.orientation)) { opt.navigator.orientation = "horizontal"; } if (options.navigator.css) { opt.navigator.css = $.extend({}, $.fn.showcase.defaults.navigator.css, options.navigator.css); } if (options.navigator.item) { opt.navigator.item = $.extend({}, $.fn.showcase.defaults.navigator.item, options.navigator.item); // Progressive extensions of hover and selected states, inherited by standard css properties opt.navigator.item.cssHover = $.extend({}, $.fn.showcase.defaults.navigator.item.css, $.fn.showcase.defaults.navigator.item.cssHover); opt.navigator.item.cssSelected = $.extend({}, $.fn.showcase.defaults.navigator.item.css, $.fn.showcase.defaults.navigator.item.cssSelected); if (options.navigator.item.css) { opt.navigator.item.css = $.extend({}, $.fn.showcase.defaults.navigator.item.css, options.navigator.item.css); opt.navigator.item.cssHover = $.extend({}, $.fn.showcase.defaults.navigator.item.cssHover, options.navigator.item.css); opt.navigator.item.cssSelected = $.extend({}, $.fn.showcase.defaults.navigator.item.cssSelected, options.navigator.item.css); } if (options.navigator.item.cssHover) { opt.navigator.item.cssHover = $.extend({}, $.fn.showcase.defaults.navigator.item.cssHover, options.navigator.item.cssHover); } if (options.navigator.item.cssSelected) { opt.navigator.item.cssSelected = $.extend({}, $.fn.showcase.defaults.navigator.item.cssSelected, options.navigator.item.cssSelected); } } } if (options && options.titleBar) { opt.titleBar = $.extend({}, $.fn.showcase.defaults.titleBar, options.titleBar); if (!/bottom|top/.test(opt.titleBar.position)) { opt.titleBar.position = "bottom"; } if (options.titleBar.css) { opt.titleBar.css = $.extend({}, $.fn.showcase.defaults.titleBar.css, options.titleBar.css); } } // Check loading mode. // If there's something in opt.images[], I'll load them asynchronously, // it will be nice to have width and height setted, in order to define the $container sizes if (opt.images.length != 0) { $container.css({ width: opt.css.width, height: opt.css.height, overflow: "hidden" }); for (var i in opt.images) { var img = new Image(); img.src = opt.images[i].url; img.alt = opt.images[i].description || ""; var $link = $("").attr({ "href": opt.images[i].link || "#", "target": opt.images[i].target || "_self" }); $link.append(img); $container.append($link); } } // Check loading state of #1 image if ($container.find("img:first")[0].complete) { $.fn.showcase.start($container, opt); } else { $container.find("img:first").load( function() { $.fn.showcase.start($container, opt); }); } // functions to control the palyback of showcase $.fn.extend({ pause: function() { $container.data("stopped", true); }, go: function() { $container.data("stopped", false); } }) } // This will start all showcase's stuffs $.fn.showcase.start = function($container, opt) { // Define local vars var index = 0; var nImages = $container.find("img").length; var $fi = $container.find("img:first"); var imagesize = { width: $fi.removeAttr("width").width(), height: $fi.removeAttr("height").height() }; opt.css.width = imagesize.width; opt.css.height = imagesize.height; // setup container $container.css(opt.css) .find("a").css({ position: "absolute", top: "0", left: "0" }) .find("img").css("border", "0px"); // setup navigator var $slider = $("
").css({ position:"absolute" }); var $divNavigator = $("