Imagino que unos cuantos de vosotros habéis topado previamente con el bug que se da en Internet Explorer cuando hacemos una precarga empleando los eventos Event.COMPLETE y ProgressEvent.PROGRESS de AS3. El bug en cuestión aparece cuando tenemos una película cacheada y volvemos a ella, para reproducirlo solamente tenéis que cargar la película y una vez cargada, pulsar F5 en vuestro navegador IE, o Ctrl + F5. Cabe destacar que esto solo ocurre con la película principal, y no las que se cargan internamente en ella.
Veréis como la precarga se queda en pantalla por los siglos de los siglos, y es que no se disparan correctamente los eventos antes citados. La solución más simple para el problema, es controlar este hecho, y qué mejor manera que viendo antes de preparar los eventos, si resulta que ya tenemos cargada por completo la película.
Imaginemos que tenemos la siguiente estructura clásica para el preloader:
function cargando(ev:ProgressEvent):void
{
var porcentaje:Number = Math.floor( (ev.bytesLoaded*100)/ev.bytesTotal );
trace ('cargado... '+porcentaje);
}
function cargaCompleta(ev:Event):void
{
trace('Listo!');
}
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, cargando);
this.loaderInfo.addEventListener(Event.COMPLETE, cargaCompleta);
Muchos optan por evitar el problema haciendo un preloader convencional con un Event.ENTER_FRAME, no obstante no es necesario, y aquí os dejamos el Tip de este viernes que nos permite la limpieza y eficiencia de la aproximación por eventos en vez de un enterFrame, sin tener que asumir el malfuncionamiento en Internet Explorer 6 y 7.
Si simplemente tenemos en cuenta comprobar inicialmente si la película está cargada por completo, algo tan sencillo como esto:
if (this.loaderInfo.bytesLoaded/this.loaderInfo.bytesTotal == 1)
{
trace('ya está cargado por completo');
}
[/as]
Por tanto nos quedaría algo así:
[as]
function cargando(ev:ProgressEvent):void
{
var porcentaje:Number = Math.floor( (ev.bytesLoaded*100)/ev.bytesTotal );
trace ('cargado... '+porcentaje);
}
function cargaCompleta(ev:Event):void
{
trace('Listo!');
}
if (this.loaderInfo.bytesLoaded/this.loaderInfo.bytesTotal == 1)
{
// ya está cargado
cargaCompleta(null);
}
else
{
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, cargando);
this.loaderInfo.addEventListener(Event.COMPLETE, cargaCompleta);
}
![Diseño Gráfico, Web & Multimedia Asturias, Oviedo // [Q] interactiva](http://q-interactiva.com/wp-content/uploads/logo_Q_100.png)