SlideShow senza linguaggi server (PHP, ASP ecc...) o file di testo (txt, xml)
Utilizzare onLoadError della classe MovieClipLoader
Inserito il 02-12-2006
Tutto quello di cui abbiamo bisogno per realizzare questo semplice slide show č una versione di flash mx 2004 o superiore e una cartella in cui salvare le immagini con nomi sequenziali, utilizzando i numeri 1-2-3 ecc... (1.jpg, 2.jpg, 3.jpg, ecc...).
Per il resto ci affidiamo unicamente al codice della funzione dichiarata di seguito:
var slideShow:Function = function (target:MovieClip, shifting:Number) {
var mclo:MovieClipLoader = new MovieClipLoader();
var mcli:Object = new Object();
var index:Number = 1;
mcli.onLoadProgress = function(target:MovieClip, lbytes:Number, tbytes:Number) {
target._parent.tPerc.text = "Caricamento..."+Math.floor((lbytes/tbytes)*100)+"%";
};
mcli.onLoadError = function(target:MovieClip, errorCode:String) {
if (errorCode == "URLNotFound") {
slideShow(target, shifting);
}
};
mcli.onLoadInit = function(target:MovieClip):Void {
target._parent.tPerc.removeTextField();
index++;
var t:Object = new mx.transitions.Tween(target, "_alpha", mx.transitions.easing.None.easeNone, 0, 100, .5, true);
t.onMotionFinished = function() {
var a = setInterval(function () {
clearInterval(a);
var t:Object = new mx.transitions.Tween(target, "_alpha", mx.transitions.easing.None.easeNone, 100, 0, .5, true);
t.onMotionFinished = function() {
mclo.loadClip("img/"+index+".jpg", target);
};
}, shifting*1000);
};
};
mcli.onLoadStart = function(target:MovieClip) {
target._parent.createTextField("tPerc", 2, 300, 290, 200, 20);
target._parent.tPerc.setTextFormat(tFormat);
target._parent.tPerc.setNewTextFormat(tFormat);
};
mclo.addListener(mcli);
mclo.loadClip("img/"+index+".jpg", test);
};
var test:MovieClip = this.createEmptyMovieClip("test", 1);
slideShow(test, 5);Copiate e incollate il codice sul primo ed unico frame del vostro slide show e provate il filmato.
In pratica il codice non fa altro che verificare il caricamento delle immagini grazie alla classe MovieClipLoader, e nel caso questo caricamento non avvenga e quindi si riceva l'errore di caricamento, riporta il contantore index a 1 e fa ricominciare lo slide dalla prima immagine.
Potete usare il codice anche caricandolo con loadMovie dentro un altro filmato.
Spero che la cosa sia gradita. A presto! ;-)
Update 27/07/2007
Dopo varie richieste di rendere "continuo" lo slideshow in modo che quando va via una immagine appare immediatamente l'altra in "assolvenza", ho deciso di scriverne la modifica e rilasciarne il nuovo codice:
var interceptMovieClip:Function = function (target_mc:MovieClip):MovieClip {
var temp:MovieClip = (target_mc._name == "firstMC") ? secondMC : firstMC;
return temp;
};
var slideShow:Function = function (target:MovieClip, index:Number, shifting:Number) {
var other = interceptMovieClip(target);
var int_index = index;
var mclo:MovieClipLoader = new MovieClipLoader();
var mcli:Object = new Object();
mcli.onLoadError = function(target:MovieClip, errorCode:String) {
if (errorCode == "URLNotFound") {
slideShow(target, index, shifting);
}
};
mcli.onLoadInit = function(target:MovieClip):Void {
trace("img/"+int_index+".jpg");
int_index += 2;
var t:Object = new mx.transitions.Tween(target, "_alpha", mx.transitions.easing.None.easeNone, 0, 100, .5, true);
t.onMotionFinished = function() {
var a = setInterval(function () {
clearInterval(a);
var t:Object = new mx.transitions.Tween(target, "_alpha", mx.transitions.easing.None.easeNone, 100, 0, .5, true);
t.onMotionFinished = function() {
mclo.loadClip("img/"+int_index+".jpg", target);
target.swapDepths(other);
};
}, shifting*1000);
};
};
mclo.addListener(mcli);
mclo.loadClip("img/"+int_index+".jpg", target);
};
//
var time_to_slide:Number = 5;
var firstMC:MovieClip = this.createEmptyMovieClip("firstMC", 1);
var index1:Number = 1;
var secondMC:MovieClip = this.createEmptyMovieClip("secondMC", 2);
var index2:Number = 2;
slideShow(firstMC, index1, time_to_slide*2);
setTimeout(slideShow, 5000, secondMC, index2, time_to_slide*2);Il sistema č lo stesso del precedente, ma vengono creati due clip che si sovrappongono nel caricamento e creano un bell'effetto di continuitā
