Hola:
Para controlar que una imagen está cargada puedes consultar su atributo "complete", o programar el evento load de las imágenes (si te decides por ela primera opción deberías usar un temporizador que consulte el atributo hasta que sea true)... y el efecto se consigue superponiendo las imágenes y cambiando la opacidad... si la nueva está encima empezando con el valor 0 e incrementándolo hasta el 1; y si es la condición inversa, también tendrá que ser la implementación.
Saludos