On 10 May 2006 02:14:55 -0700, melinda123 (AT) email (DOT) it wrote:
Quote:
Se si clicca su zoom, mi apre la finestra popup con l'immagine dentro.
La prima volta che si apre il popup, non visualizza niente.Se poi si
riclicca su zoom l'immagine viene caricata.
[..]
principalmente scrivo questo.
img border="0" alt="Clicca sull\'immagine per c udere questa finestra
!" height="'+h+'" width="'+w+'" src="'+img.src+'"/
[..]
Ho notato che la prima volta che viene caricato il popup ,le variabili
h e w sono a 0. |
Okay, ho afferrato la questione. In pratica tu stai richiedendo le dimensioni
di un'immagine quando questa ancora non è stata caricata, tutto qui.
il "document.close()" non c'entra.
Il punto del codice incriminato è il seguente:
var img = new Image();
img.src = URL;
w=img.width;
h=img.height;
Se qui fai un alert di w e h, come hai già notato, risulteranno entrambi a
zero; a meno che l'immagine non sia già stata cachata. Questo perché
impostando "img.src", chiedi al browser di fare una richiesta della risorsa
specificata dalla variabile "URL", ma il caricamento della risorsa non è certo
istantaneo, mentre il codice script successivo alla richiesta viene eseguito
immediatamente.
Di conseguenza, w e h non sono ancora state avvalorate.
Non è un "problema" di Firefox, è così che funzionano i browser. Anche su IE
hai il medesimo effetto, se lo provi da remoto e non in locale (ovviamente
dipende anche dalla banda e dalla dimensione dell'immagine).
Per recuperare le dimensioni di un'immagine, devi utilizzare l'evento onload:
var img = new Image();
img.onload=function(){
/* questo codice verrà eseguito solo al caricamento effettuato */
alert(this.width+"x"+this.height);
}
/* questo codice viene eseguito subito */
img.src = URL;
Ed è dentro l'onload che aprirai la finestra con le dimensioni richieste.
Di queste cose comunque, ne è già stato parlando ampiamente in passato su
questo NG, facendo una ricerca negli archivi (con google groups ad esempio)
troverai sicuramente molte informazioni che ti potranno essere d'aiuto.
Un suggerimento: volendo potresti fare a meno di tutto questo, per recuperare
le dimensioni corrette.
Del resto, hai già l'immagine caricata con le dimensioni in proporzione. Se
hai mantenuto la stessa proporzione per tutte le immagini, per ottenere le
dimensioni originali ti basta recuperare le dimensioni dell'anteprima e
moltiplicarle per il fattore di scala usato.
--
"E' un vero peccato che tutte le persone che sanno come far funzionare
il Paese siano troppo occupate a guidare taxi o a tagliare capelli."
(George Burns)