Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Bat
    Registrato dal
    May 2002
    Messaggi
    588

    [Fpro8] slider con preload

    ogni tanto mi ricimento con questo software, ma so benissimo di non essere una cima.

    ho un problema con uno script, non è tutta farina del mio sacco, l'ho scaricato da qualche parte (ma non so quando, nè dove) e probabilmente anche modificato, contiene alcune procedure inutilizzate che in origine permettevano la navigazione delle immagini ora non utilizzate)

    dovrebbe visualizzare uno slideshow di immagini che vado a pescare da un xml esterno mostrando un eventuale preload per ciascuna immagine.

    eseguito in locale il tutto funziona senza problemi, messo in remoto sembra che il preload interferisca in qualche modo con il caricamento delle immagini, questo è il comportamento :

    la prima immagine viene correttamente caricata (con tanto di preload). le immagini successive invece no. se ricarico la pagina viene visualizzata la prima immagine (senza preload perchè letta dalla cache), la seconda con il preload e poi stop.
    ricaricando nuovamente ogni volta ottengo un immagine in più.


    la lista xml è semplicemente
    codice:
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <images>
        <pic>
            <image>foto001.jpg</image>
            <caption>foto1</caption>
        </pic>
        <pic>
            <image>foto002.jpg</image>
            <caption>foto2</caption>
        </pic>
        <pic>
            <image>foto003.jpg</image>
            <caption>foto3</caption>
        </pic>
        <pic>
            <image>foto004.jpg</image>
            <caption>foto4</caption>
        </pic>
    </images>
    sullo stage ho solo il clip filmato "picture" che conterrà le immagini ed il clip "preload" (un rettangolo che contiene un altro clip chiamato "preload_bar")

    nel primo fotogramma ho il seguente codice :

    codice:
    delay = 4000;
    //-----------------------
    function loadXML(loaded) {
    
    if (loaded) {
    
    xmlNode = this.firstChild;
    image = [];
    description = [];
    total = xmlNode.childNodes.length;
    for (i=0; i<total; i++) {
    
    image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
    description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
    
    }
    firstImage();
    
    } else {
    
    content = "file not loaded!";
    
    }
    
    }
    xmlData = new XML();
    xmlData.ignoreWhite = true;
    xmlData.onLoad = loadXML;
    xmlData.load("./lista.xml");
    /////////////////////////////////////
    listen = new Object();
    listen.onKeyDown = function() {
    
    if (Key.getCode() == Key.LEFT) {
    
    prevImage();
    
    } else if (Key.getCode() == Key.RIGHT) {
    
    nextImage();
    
    }
    
    };
    p = 0;
    this.onEnterFrame = function() {
    
    filesize = picture.getBytesTotal();
    loaded = picture.getBytesLoaded();
    preloader._visible = true;
    if (loaded != filesize) {
    
    preloader.preload_bar._xscale = 100*loaded/filesize;
    
    } else {
    
    preloader._visible = false;
    if (picture._alpha<100) {
    
    picture._alpha += 10;
    
    }
    
    }
    
    };
    function nextImage() {
    
    if (p<(total-1)) {
    
    p++;
    if (loaded == filesize) {
    
    picture._alpha = 0;
    picture.loadMovie(image[p], 1);
    desc_txt.text = description[p];
    picture_num();
    slideshow();
    
    }
    
    }
    
    }
    function prevImage() {
    
    if (p>0) {
    
    p--;
    picture._alpha = 0;
    picture.loadMovie(image[p], 1);
    desc_txt.text = description[p];
    picture_num();
    
    }
    
    }
    function firstImage() {
    
    if (loaded == filesize) {
    
    picture._alpha = 0;
    picture.loadMovie(image[0], 1);
    desc_txt.text = description[0];
    picture_num();
    slideshow();
    
    }
    
    }
    function picture_num() {
    
    current_pos = p+1;
    pos_txt.text = current_pos+" / "+total;
    
    }
    function slideshow() {
    
    myInterval = setInterval(pause_slideshow, delay);
    function pause_slideshow() {
    
    clearInterval(myInterval);
    if (p == (total-1)) {
    
    p = 0;
    firstImage();
    
    } else {
    
    nextImage();
    
    }
    
    }
    
    }
    considerate le procedure inutilizzate c'è ben poco codice in tutto, ma non riesco a capire perchè di questo anomalo comportamento .. idee?

  2. #2
    Utente di HTML.it L'avatar di Bat
    Registrato dal
    May 2002
    Messaggi
    588
    a parte che ho sbagliato il titolo, doveva essere "slideshow con preload".

    nel frattempo ho notato però un fatto strano: con ie funziona tutto in opgni caso.
    il problema si manifesta soltanto con firefox (e solo in remoto, quindi rimango convinto che si tratti di un problema del preload).

    qualcuno è a conoscenza di problemi legati ai plugin di ff che possano interferire ??

  3. #3
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    non mi sono fermato a leggere il codice che hai scritto perchè è un po' lungo... però credo che il tuo problema sia legato al fatto che l'esecuzione del caricamento e quello della funzione di slide, si intrecciano nel tempo... fatto dimostrante è che una volta caricate le immagini in cache, il funzionamento va bene fino alla successiva non caricata...probabilmente basta anche solo aumentare di poco la tua variabile "delay"... tipo di altri due secondi (delay = 6000

    in ogni caso sulla base delle tue indicazioni ho scritto un codice veloce che dovrebbe fare esattamente quel che chiedi

    codice:
    var slideShow:Function = function (array:Array) {
    	var mclo:MovieClipLoader = new MovieClipLoader();
    	var mcli:Object = new Object();
    	var index:Number = 0;
    	var shifting:Number = 2000;
    	var test:MovieClip = _level0.createEmptyMovieClip("test", 1);
    	mcli.onLoadInit = function(target:MovieClip):Void  {
    		target._alpha = 100;
    		index = (index>=array.length-1) ? 0 : index+1;
    		var a = setInterval(function () {
    			clearInterval(a);
    			mclo.loadClip("img/"+array[index].image, target);
    		}, shifting);
    	};
    	mclo.addListener(mcli);
    	mclo.loadClip("img/"+array[index].image, test);
    };
    var xmlUrl:String = "images.xml";
    var parseArray:Array = new Array();
    var parseXML:XML = new XML();
    parseXML.ignoreWhite = true;
    parseXML.onLoad = function(success:Boolean):Void  {
    	if (this.loaded) {
    		var temp:Array = this.firstChild.childNodes;
    		for (var i = 0; i<temp.length; i++) {
    			parseArray.push({image:temp[i].childNodes[0].firstChild.toString(), caption:temp[i].childNodes[1].firstChild.toString()});
    		}
    		slideShow(parseArray);
    	}
    };
    parseXML.load(xmlUrl);
    da affinare perchè non ha una transizione tra una foto e l'altra, nè un preload grafico... va pubblicata per Flash 7 o successivo e AS2

  4. #4
    Utente di HTML.it L'avatar di Bat
    Registrato dal
    May 2002
    Messaggi
    588
    ciao and80,
    grazie del codice, decisamente più pulito di quello che usavo io.
    Così com'è non si verifica il problema cha invece affligge l'altro codice ...mò vedo se riesco a infilarci un pezzo di preloader e un alpha sulle transazioni
    grazie

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da Bat
    ciao and80,
    grazie del codice, decisamente più pulito di quello che usavo io.
    Così com'è non si verifica il problema cha invece affligge l'altro codice ...mò vedo se riesco a infilarci un pezzo di preloader e un alpha sulle transazioni
    grazie
    per inserire un preload grafico devi proseguire nella direzione del codice, ossia... devi utilizzare la classe MovieClipLoader per caricare i file (come puoi vedere c'è un loadClip, al posto del classico loadMovie)...
    non so se la conosci e sai come funziona... in ogni caso è un discorso che volevo proseguire anch'io... ne posterò il risultato qui stesso, ok?!

  6. #6
    Utente di HTML.it L'avatar di Bat
    Registrato dal
    May 2002
    Messaggi
    588
    ciao and80,

    grazie dell'interessamento.
    per la verità sono un po' preso 'sti giorni, quindi ho verificato che il tuo codice funzionasse e gli ho messo solo l'effetto alpha in ingresso, rimandando il preloader a data da destinarsi. (primo ritaglio di tempo libero), se ne avessi il tempo tu non potrei che ringraziarti.

    qua posto l'aggiornamento che ho integrato per visualizzare un effetto "soft" in apertura delle immagini.


    Codice PHP:
    var slideShow:Function = function (array:Array) {
        var 
    mclo:MovieClipLoader = new MovieClipLoader();
        var 
    mcli:Object = new Object();
        var 
    index:Number 0;                
        var 
    shifting:Number 2000;            
        var 
    test:MovieClip _level0.createEmptyMovieClip("test"1);
        
    mcli.onLoadInit = function(target:MovieClip):Void  {
            
    target._alpha 40;                
            
    index = (index>=array.length-1) ? index+1;
            var 
    setInterval(function () {
                
    clearInterval(a);
                
    mclo.loadClip("img/"+array[index].imagetarget);
            }, 
    shifting);
            
    target.onEnterFrame = function() {
                if (
    target._alpha 100target._alpha += 10;
            }
        };
        
    mclo.addListener(mcli);
        
    mclo.loadClip("img/"+array[index].imagetest);
    };
    var 
    xmlUrl:String "images.xml";
    var 
    parseArray:Array = new Array();
    var 
    parseXML:XML = new XML();
    parseXML.ignoreWhite true;
    parseXML.onLoad = function(success:Boolean):Void  {
        if (
    this.loaded) {
            var 
    temp:Array = this.firstChild.childNodes;
            for (var 
    0i<temp.lengthi++) {
                
    parseArray.push({image:temp[i].childNodes[0].firstChild.toString(), caption:temp[i].childNodes[1].firstChild.toString()});
            }
            
    slideShow(parseArray);
        }
    };
    parseXML.load(xmlUrl); 

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    allora, come preannunciato... ho sviluppato il codice con entrata e uscita e ho integrato la "zona preload"

    codice:
    var slideShow:Function = function (array:Array) {
    	var mclo:MovieClipLoader = new MovieClipLoader();
    	var mcli:Object = new Object();
    	var index:Number = 0;
    	var shifting:Number = 2000;
    	var test:MovieClip = _level0.createEmptyMovieClip("test", 1);
    	mcli.onLoadProgress = function(target:MovieClip, lbytes:Number, tbytes:Number) {
    		trace("Caricamento..."+Math.floor((lbytes/tbytes)*100)+"%");
    	};
    	mcli.onLoadInit = function(target:MovieClip):Void  {
    		index = (index>=array.length-1) ? 0 : index+1;
    		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/"+array[index].image, target);
    				};
    			}, shifting);
    		};
    	};
    	mclo.addListener(mcli);
    	mclo.loadClip("img/"+array[index].image, test);
    };
    var xmlUrl:String = "images.xml";
    var parseArray:Array = new Array();
    var parseXML:XML = new XML();
    parseXML.ignoreWhite = true;
    parseXML.onLoad = function(success:Boolean):Void  {
    	if (this.loaded) {
    		var temp:Array = this.firstChild.childNodes;
    		for (var i = 0; i<temp.length; i++) {
    			parseArray.push({image:temp[i].childNodes[0].firstChild.toString(), caption:temp[i].childNodes[1].firstChild.toString()});
    		}
    		slideShow(parseArray);
    	}
    };
    parseXML.load(xmlUrl);
    sostanzialmente il codice riprende lo slideshow della mia firma (senza xml o altro), ma ha in più il parsing del file esterno
    la parte in rosso è quella che gestisce il preload grafico, in questo caso io ho utilizzato un semplice trace, ma è possibile usare una barra ad esempio da "attaccare" all'inizio del caricamento (onLoadStart, che non ho implementato), e staccare alla fine (onLoadComplete, che non ho implementato)
    diciamo per completezza che riprendiamo il codice di sopra e consideriamo di avere una barra nella libreria, concatenata con nome "loadbar", di dimensioni 200x20 px, poi consideriamo di avere uno stage di 800x600 px (tutto questo per dare una posizione centrale alla barra al momento in cui la attacchiamo)... per questo la nostra barra al momento in cui viene attaccata, avrà posizione x=(800-200)/2 e y=(600-20)/2

    codice:
    var slideShow:Function = function (array:Array) {
    	var mclo:MovieClipLoader = new MovieClipLoader();
    	var mcli:Object = new Object();
    	var index:Number = 0;
    	var shifting:Number = 2000;
    	var test:MovieClip = _level0.createEmptyMovieClip("test", 1);
    	mcli.onLoadStart = function() {
    		_level0.attachMovie("loadbar", "loadbar", _level0.getNextHighestDepth(), {_x:300, _y:290, _xscale:0});
    	}
    	mcli.onLoadProgress = function(target:MovieClip, lbytes:Number, tbytes:Number) {
    		var perc = Math.floor((lbytes/tbytes)*100);
    		_level0["loadbar"]._xscale = perc;
    	};
    	mcli.onLoadComplete = function(){
    		_level0["loadbar"].removeMovieClip();
    	}
    	mcli.onLoadInit = function(target:MovieClip):Void  {
    		index = (index>=array.length-1) ? 0 : index+1;
    		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/"+array[index].image, target);
    				};
    			}, shifting);
    		};
    	};
    	mclo.addListener(mcli);
    	mclo.loadClip("img/"+array[index].image, test);
    };
    var xmlUrl:String = "images.xml";
    var parseArray:Array = new Array();
    var parseXML:XML = new XML();
    parseXML.ignoreWhite = true;
    parseXML.onLoad = function(success:Boolean):Void  {
    	if (this.loaded) {
    		var temp:Array = this.firstChild.childNodes;
    		for (var i = 0; i<temp.length; i++) {
    			parseArray.push({image:temp[i].childNodes[0].firstChild.toString(), caption:temp[i].childNodes[1].firstChild.toString()});
    		}
    		slideShow(parseArray);
    	}
    };
    parseXML.load(xmlUrl);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.