Nelle soluzioni elaborate si va incontro a due "pecche" :
- Il Valore di oplevel, una variabile che abbiamo introdotto per definire il livello di opacità (e che potevamo anche chiamare giuseppe), continua a crescere indefinitamente, anche oltre l' 1 necessario, e ad essere inviato al Tag img name="viewer" perché non c'è alcuna istruzione che arresta la ricorsione.
Questa operazione tiene impegnato il processore del computer, anche se per un carico trascurabile, sinché non si chiuderà la pagina; anche se il tutto funziona, non è un buon modo di concludere le cose.
Introdurremo un if -statement per cui, se oplevel ha già raggiunto il livello massimo necessario, non si attiverà più il setTimeout() che procede alla ricorsione temporizzata della funzione.
- Nell' ultima versione della function fade() l' URL dell' immagine continua ad essere inviato ripetutamente al Tag IMG visualizzatore (basterebbe una prima volta); quantunque l' immagine trovasi ormai nella cache del Browser, questa operazione implica on re-loading continuo di quell' immagine.
Un altro approccio può consistere nel partire da un' immagine già presente e con opacità a 0 zero, nell' HTML regolare; poi la rendiamo visibile incrementandone l' opacità.
Un po' come il passaggio da un display: none; a un display: block; che anche può essere il metodo adottato nella tua pagina per far apparire l' immagine. Solo che questo consente solo "o tutta o niente" visibilità, quest' altro invece prevede gradi intermedi.
Allora il Tag diventa così, con una doppia definizione di STYLE:
<img name="viewer" src="url_immagine.jpg" style="opacity: 0; filter: alpha(opacity=0);">
filter: alpha(opacity=0); è per Internet Explorer e va da 0 a 100;
opacity: 0; è per altri Navigatori e va da 0 a 1;
Ti posto velocemente (devo chiudere) un esempio che funziona con tutti i Browser attuali:
codice:
<html>
<head><title>cross-browsers faded appearence</title>
<script type="text/javascript">
var oplevel = 0;
function fade_in(){
document.images["viewer"].style.opacity = oplevel/100;
document.images["viewer"].style.filter = "alpha(opacity = " + oplevel + ")";
oplevel = oplevel + 1;
if (oplevel < 100){
setTimeout('fade_in();', 100);
}
}
</script>
</head>
<body>
<div align="center">
Avvia Visualizzazione Immagine in Dissolvenza
</div>
</body>
</html>