Hace tiempo encontré un preloader para hacer lo que tú pides fácilmente. le quité la morralla y dejé ésto:
Código PHP:
<?php
$imagenes=array("img1.jpg","img2.jpg","img3.jpg","img4.jpg");
?>
<SCRIPT>
//Para imagenes en arrays javascrip
var imagenes=["img1.jpg","img2.jpg","img3.jpg","img4.jpg"];
//Para imagenes cargadas en arrays de PHP
var imagenes=<?php echo json_encode($imagenes); ?>
//Objeto cargador. NO TOCAR.
var cargador={onComplete:function(){},onLoaded:function(){},current:null,qLength:0,images:[],inProcess:false,queue:[],queue_images:function(){var arg=arguments;for(var i=0;i<arg.length;i++){if(arg[i].constructor===Array){this.queue=this.queue.concat(arg[i])}else if(typeof arg[i]==='string'){this.queue.push(arg[i])}}},process_queue:function(){this.inProcess=true;this.qLength+=this.queue.length;while(this.queue.length>0){this.load_image(this.queue.shift())}this.inProcess=false},load_image:function(imageSrc){var th=this;var im=new Image;im.onload=function(){th.current=im;th.images.push(im);(th.onLoaded)();if(th.queue.length>0&&!th.inProcess){th.process_queue()}if(th.qLength==th.images.length){(th.onComplete)()}};im.src=imageSrc}}
//Definimos la funcion oncomplete, que se ejecutará cuando se carguen todas las imágenes. Solo se ejecuta una vez, como es obvio.
cargador.onComplete=function (){
//Poner visible la capa donde están las fotos, o lo que sea.
}
//Esta función se disparará una vez por cada foto cargada.
cargador.onLoaded=function(i){
//la imagen del array con índice i acaba de cargarse con éxito
//Podemos utilizar esta función para hacer una barra de loading típica de 0% a 100%
}
//Con esta orden le pasamos al objeto cargador el array de imágenes a cargar.
cargador.queue_images(imagenes);
//Con esta orden ponemos las imágenes a cargar.
cargador.process_queue();
}
</SCRIPT>
Las imágenes <IMG src="img1.jpg" />, etc, tienes dos opciones:
Las metes en un div de inicio, junto al resto de la página, que inicialmente está con display:none o visibility:hidden, o creas el objeto IMG con javascript con CREATEELEMENT y APPENDCHILD para meterlas donde quieras.