/* * * Copyright (c) 2006 Millstream Web Software http://www.millstream.com.au * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * * */ /* * Class: Slideshow * Written by: Andrew Tetlaw http://tetlaw.id.au * Displays a cross-fading slideshow * Option:default * uri : [], // an array of image URIs * legend : [], // an array of legends * interval : 5, // seconds for each slide to be visible * duration : 1, // duration of fade efefct * fps : 50, // frames per second of slide effect; shouldn't need to adjust this * crossfade : true // if you don't want a cross-fade set this to false and it'll do a fade out - fade in , instead. */ var Slideshow = Class.create(); Slideshow.prototype = { initialize : function(elm, options) { this.elm = $(elm); this.counter = 0; this.loaded = false; this.options = Object.extend({ uri : [], legend : [], size_x : [], size_y : [], interval : 5, duration : 1, fps : 50, crossfade : true }, options || {}) this.options.uri = $A(this.options.uri); if(FastInit) { FastInit.addOnLoad(this.start.bind(this)); } else { Event.observe(window, 'load', this.start.bind(this)); } }, start: function() { //console.log('start... ' + this.options.uri.length + ' uris defined'); var elm = this.elm; var img = document.createElement('img'); img.src = this.options.uri[0]; // Legende und Seitenzahlen $('legend').innerHTML = decodeBase64(this.options.legend[0]); $('example').style.width = this.options.size_x[0]+'px'; $('example').style.height = this.options.size_y[0]+'px'; $('pagex').innerHTML = 1; $('pagey').innerHTML = this.options.uri.length; this.cycle(); new PeriodicalExecuter(this.cycle.bind(this), this.options.interval); }, cycle: function() { var elm = this.elm; var opt = this.options; if(this.counter++ == opt.uri.length) { this.counter = 1 this.loaded = true; } count = this.counter; var next = document.createElement('img'); next.src = this.options.uri[count-1]; // Legende und Seitenzahlen $('legend').innerHTML = decodeBase64(this.options.legend[count-1]); $('example').style.width = this.options.size_x[count-1]+'px'; $('example').style.height = this.options.size_y[count-1]+'px'; $('pagex').innerHTML = count; if(!this.loaded) { var preload = document.createElement('img'); preload.src = this.options.uri[count]; } //console.log(next.src); if(this.options.crossfade) { var currentSlide; if(elm.firstChild) { currentSlide = elm.firstChild; } else { currentSlide = document.createElement('div'); elm.appendChild(currentSlide); } var nextSlide = $(document.createElement('div')); nextSlide.className = 'slide-image'; nextSlide.style.width = this.options.size_x[count-1]+'px'; nextSlide.style.height = this.options.size_y[count-1]+'px'; nextSlide.style.backgroundImage = 'url('+next.src+')'; nextSlide.setOpacity(0); elm.appendChild(nextSlide); new Effect.Parallel([new Effect.Fade(currentSlide,{sync:true}), new Effect.Appear(nextSlide,{sync:true})], {duration: opt.duration, fps: opt.fps, afterFinish : function() {Element.remove(currentSlide)}} ); } else { new Effect.Fade(elm, { duration: opt.duration, fps: opt.fps, afterFinish: function() { elm.style.backgroundImage = 'url('+next.src+')'; new Effect.Appear(elm, { duration: opt.duration, fps: opt.fps, queue:'end' }); } }) } } };