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>