Im nachstehenden Beispiel werden Bilder ineinander eingefadet. Ist das Ende der Bilder erreicht, wird beim Ersten erneut begonnen.
Es reicht, ein Objekt zu initialieren und dabei die gültige ID eines existierenden Elements, das die Bilder enthalten soll, zu übergeben. Weiterhin wird dem Objekt ein Array mit Bildquellen bereitgestellt.
Das Initialisieren erfolgt, indem die gewünschten Optionen in Form eines Objekts übergeben werden (siehe Quellcode). Im Einzelnen stehen folgende Optionen zur Verfügung:
(optional, default: 120)(optional, default: 120)(optional, default: 2000)(optional, default: 10)(optional, default: 0.01)(optional, default: 'my_img')Weiterhin wird beim Initialisieren ein Objekt zurückgegeben, über welches Zugriff auf eine kleine API möglich ist.
/* ****************************************************************************************** *
* Das Script kann frei verwendet werden, dieser Kommentar sowie die Nennung des Nicks
* müssen jedoch erhalten bleiben.
*
* Quaese (www.quaese.de), 2010
* ****************************************************************************************** */
var Fader = function(objOpts){
var settings = {
w: 120,
h: 120,
delay: 10,
imgs: [],
timer: 1000,
cls_img: null,
handle: null,
step: 0.01
}
var _this = this;
for(var strKey in objOpts)
settings[strKey] = objOpts[strKey];
if((typeof settings.id == "undefined") || (settings.imgs.length==0)) return settings;
var init = function(){
initFader();
//fadeImgs();
settings.handle = window.setTimeout(function(){fadeImgs();}, settings.timer);
}
var initFader = function(){
// Bilderzähler initialisieren
settings.counter = 0;
settings.wrapper = document.getElementById(settings.id);
settings.holder = document.createElement("div");
settings.wrapper.appendChild(settings.holder);
settings.holder.style.position = "relative";
settings.holder.style.height = settings.h + "px";
// Unteres Bild
settings.img1 = new Image();
settings.img1.src = settings.imgs[settings.counter+1];
settings.holder.appendChild(settings.img1);
imgStyles(settings.img1, 1);
if(settings.cls_img != null) settings.img1.className = settings.cls_img;
// Oberes Bild
settings.img2 = new Image();
settings.img2.src = settings.imgs[settings.counter];
settings.holder.appendChild(settings.img2);
imgStyles(settings.img2, 2);
if(settings.cls_img != null) settings.img2.className = settings.cls_img;
settings.opac = 1.0;
}
// Bilder mit CSS absolut positionieren
var imgStyles = function(objImg, strZIndex){
objImg.style.position = "absolute";
objImg.style.top = "0px";
objImg.style.left = "0px";
objImg.style.width = settings.w + "px";
objImg.style.height = settings.h + "px";
objImg.style.zIndex = strZIndex;
}
// Fade-Funktion
var fadeImgs = function(){
settings.opac -= settings.step;
setOpacity();
if(settings.opac>0){
settings.handle = window.setTimeout(function(){fadeImgs();}, 10);
}else{
// Bilder tauschen
//settings.img2.style.display = "none";
settings.img2.src = settings.img1.src;
settings.opac = 1.0;
setOpacity();
// Falls Bildarraygrenze erreicht wurde -> resetten
if(++settings.counter >= settings.imgs.length-1)
settings.counter = -1;
// Quelle des unteren Bildes aktualisieren
settings.img1.src = settings.imgs[settings.counter+1];
// Zeitverzögert starten
settings.handle = window.setTimeout(function(){fadeImgs();}, settings.timer);
}
}
// Transparenzwerte setzen
var setOpacity = function(){
settings.img2.style.MozOpacity = settings.opac;
settings.img2.style.opacity = settings.opac;
settings.img2.style.filter = "alpha(opacity="+(settings.opac*100)+")";
}
/* ***** [Public/API] *************** */
// Stoppen des Faders
settings.stop = function(){
window.clearTimeout(settings.handle);
settings.handle = null;
}
// Starten des Faders
settings.start = function(){
if(settings.handle != null) return;
fadeImgs();
}
// Zurücksetzen und erneutes Starten des Faders
settings.restart = function(){
window.clearTimeout(settings.handle);
settings.handle = null;
settings.wrapper.innerHTML = "";
init();
}
// Zurücksetzen und erneutes Starten des Faders
settings.reset = function(){
window.clearTimeout(settings.handle);
settings.handle = null;
settings.wrapper.innerHTML = "";
initFader();
}
// Objekt initialisieren und Faden anstossen
init();
return settings;
}
// Beispiel-Array mit Bildquellen
var arrImgs = ["../bilder/muenze_1.gif", "../bilder/muenze_2.gif", "../bilder/muenze_3.gif"];
window.onload = function(){
// Fader-Objekt initialisieren
objFader = Fader({
id: "img_holder", // ID des Holderelements
imgs: arrImgs, // Array der Bildquellen (src)
w: 120, // (integer, optional) Breite der Bilder
h: 120, // (integer, optional) Höhe der Bilder
timer: 2000, // (integer, optional) Zeit zwischen den Fade-Vorgängen
delay: 10, // (integer, optional) Geschwindigkeit des Fadevorgangs (kleiner = schneller)
step: 0.01, // (float, optional) Schrittweite beim Faden (grösser = schneller)
cls_img: 'my_img' // (string, optional) CSS-Klasse zum Auszeichnen der Bilder
});
}