Comunidad de diseño web y desarrollo en internet online

Problema Grave con un Loader

Citar            
MensajeEscrito el 22 Ene 2008 04:20 pm
Hola Amigos, tengo un problema con el cargador que estoy usando para cargar los distintos MC de un sitio en flash. El sitio tiene una base con botonera (cargador 1) que es de donde se cargan los distintos MC que se van llamando. Cada uno de estos MC tiene a su vez, otro cargador (cargador 2).
El problema se presenta cuando está cargando un MC que he llamado desde la base; si no ha terminado la carga total y hago click en otro link de la botonera del flash base, se comporta muy extraño y el sitio queda pegado en un solo frame. Luego cualquier otro link de la botonera que yo clickee me carga el mismo frame.

Pueden ver el ejemplo de lo que pasa en http://www.zet.cl/test/cortfray/ luego de entrar, al cargar por ejemplo "quienes somos" no dejar que cargue completo y clickear en "donde estamos". Luego todo el sitio parece afectado.

Los códigos de los cargadores son

Cargador 1

Código :

//seteando el cargador
function cargando() {
   var total, cargados, porcentaje;
   total = _root.getBytesTotal();
   cargados = _root.getBytesLoaded();
   porcentaje = Math.floor((cargados*100)/total);
   porcentaje_txt.text = porcentaje+" %";
   barra_mc.gotoAndStop(porcentaje);
   if (cargados == total) {
      clearInterval(hiloPrecarga);
      gotoAndStop(2);
   }
}
var hiloPrecarga = setInterval(cargando, 1);
stop();



Cargador 2

Código :

//seteando el cargador
function cargando() {
   var total, cargados, porcentaje;
   total = getBytesTotal();
   cargados = getBytesLoaded();
   porcentaje = Math.floor((cargados*100)/total);
   porcentaje_txt.text = porcentaje+" %";
   barra_mc.gotoAndStop(porcentaje);
   if (cargados == total) {
      clearInterval(hiloPrecarga);
      gotoAndStop(2);
   }
}
var hiloPrecarga = setInterval(cargando, 1);



Les agradecería mucho su ayuda, comentarios, ideas, etc. Yo pienso que tiene que ver con que la función cargando queda colgada al abrir otro MC mientras carga. No se si hay algun código para eliminar una función en caso de que se cierre antes de que termine.

Muchas gracias y Saludos a todos

Por Diego_SSC

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Ene 2008 04:49 pm
lo que pasa es que llamas varias precargas y todas quieren tomar los datos pero se confunden y reinician la pelicula y cargan un pedacito y se enredan y yo cargo primero y la otra también... mmm Bueno!!

lo que puedes hacer es blokear el resto de botones cuando des clic en cualquiera y cuando termine la precarga los desblokeas para que esto no te pase. Lo puedes hacer con un boton invisible que los cubra a todos ó usando un for que los llame a todos al mismo tiempo y les aplique un "enabled = false" temporalmente.

Por vcomics

217 de clabLevel



 

Medellin - Colombia

firefox
Citar            
MensajeEscrito el 22 Ene 2008 05:21 pm
Gracias vcomics, ahora estoy cambiandole el nombre a cada función "cargando" para cada MC (como "cargando_quienes"), haber si así no se confunde tanto. Si no resulta tendre que tapar los botones mientras carga. Gracias por tu respuesta.

Salutes!

Por Diego_SSC

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Ene 2008 05:27 pm
Pero no tienes necesidad de cambiar las funciones si las precargas las tienes bien, lo único que te falta sería impedir que el usuario haga clic hasta que termine la precarga de la seccion.

Por vcomics

217 de clabLevel



 

Medellin - Colombia

firefox
Citar            
MensajeEscrito el 22 Ene 2008 07:28 pm
Hola vcomics, tienes toda la razón. No he conseguido nada cambiando los nombres de las funciones... He hecho lo que me recomendabas y funciona bien. Ahora, necesito tu ayuda para simplificar un poco el código (acortarlo).

He puesto en el flash base el siguiente código para deshabilitar todos los botones mientras etstá cargando:

Código :

//deshabilito los botones para la carga del MC
btn_home.enabled = false;
btn_quienes.enabled = false;
btn_donde.enabled = false;
btn_obras.enabled = false;
btn_porta.enabled = false;
btn_contacto.enabled = false;
btn_intra.enabled = false;


y en cada MC que se carga la siguiente instrucción, acoplada a la función cargar:

Código :

function cargando_vit() {
   var total_vit, cargados_vit, porcentaje_vit;
   total_vit = getBytesTotal();
   cargados_vit = getBytesLoaded();
   porcentaje_vit = Math.floor((cargados_vit*100)/total_vit);
   porcentaje_txt.text = porcentaje_vit+" %";
   barra_mc.gotoAndStop(porcentaje_vit);
   if (cargados_vit == total_vit) {
      clearInterval(hiloPrecarga_vit);
      _root.btn_home.enabled = true;
      _root.btn_quienes.enabled = true;
      _root.btn_donde.enabled = true;
      _root.btn_obras.enabled = true;
      _root.btn_porta.enabled = true;
      _root.btn_contacto.enabled = true;
      _root.btn_intra.enabled = true;
      play();
      }   
   }
var hiloPrecarga_vit = setInterval(cargando_vit, 1);


¿como puedo simplificar el código para no nombrarlos todos?

Muchas gracias nuevamente

Por Diego_SSC

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Ene 2008 07:56 pm
bueno para empezar te recomiendo que los nombres a todos igual y le agregues un numero por ejemplo boton1, boton2, boton3... boton7. y luego puedes aplicar un for para llamarlos todos al mismo tiempo.

Código :

/// Esto para que se blokeen temporalmente
var cantidad:Number = 7;//cantidad de botones;
for (var i:Number = 1;i<=cantidad;i++) {
   // nombre de los botones: boton1, boton2, boton3... boton7;
   var clip:MovieClip = eval("boton"+i);
   clip.enabled = false;
}

y esto para volver al estado natural de boton

Código :

function cargando_vit() {
   var total_vit, cargados_vit, porcentaje_vit;
   total_vit = getBytesTotal();
   cargados_vit = getBytesLoaded();
   porcentaje_vit = Math.floor((cargados_vit*100)/total_vit);
   porcentaje_txt.text = porcentaje_vit+" %";
   barra_mc.gotoAndStop(porcentaje_vit);
   if (cargados_vit == total_vit) {
      clearInterval(hiloPrecarga_vit);
      var cantidad:Number = 7;//cantidad de botones;
      for (var j:Number = 1; j<=cantidad; j++) {
         // nombre de los botones: boton1, boton2, boton3... boton7;
         var clip:MovieClip = eval("boton"+j);
         clip.enabled = true;
      }
      play();
   }
}
var hiloPrecarga_vit = setInterval(cargando_vit, 1);

Creo que esto te debe funcionar.
Saludos
^^ ^^

Por vcomics

217 de clabLevel



 

Medellin - Colombia

firefox
Citar            
MensajeEscrito el 22 Ene 2008 08:18 pm
Vale compañero!, muchas gracias por todo.
Y que la suerte te acompañe en tu camino!

Por Diego_SSC

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Ene 2008 08:24 pm
:wink:
Para eso estamos, para aprender entre todos. jeje
Saludos!!!
:lol:

Por vcomics

217 de clabLevel



 

Medellin - Colombia

firefox
Citar            
MensajeEscrito el 31 Ene 2008 03:01 pm
Yo tengo el mismo problema, cargo swf externos y si mientras esta cargando uno pincho en otra seccion, se vuelve loca la pagina, pero claro, no me deja bloquear los botones.

Los botones estan en la pagina principal, y la precarga al principio de cada uno de los swf externos.

No hay forma de poner a cero la precarga cada vez que se carga uno de los swf externos?

Un saludo

Por jumonweb

6 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 31 Ene 2008 03:24 pm
Machete paisa XD

Por gustavogarzon

166 de clabLevel



 

msie7
Citar            
MensajeEscrito el 31 Ene 2008 03:30 pm
ein? jajaja

Por jumonweb

6 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 31 Ene 2008 03:46 pm
Con un onEnterFrame que esté siempre pendiente del contenedor en la precarga!. puede ser una.. o iniciando una funcion de precarga cada que llames un nuevo SWF!!

Por vcomics

217 de clabLevel



 

Medellin - Colombia

firefox
Citar            
MensajeEscrito el 31 Ene 2008 03:50 pm
ya ta, lo solucione. En los botones, al igual que le ponemos el swf que queremos cargar, le tenemos que poner un

removeMovieClip("elnombrequesea.swf");

para que asi, primero nos elimina los datos de la anterior precarga y luego carga la nueva, asi no se vuelve loco, y el que ve la pagina, no tiene que esperar a que se carge una seccion para ir a otra.

No obstante, el codigo que tiene que ir en la precarga ha de ser este, por que si no no funciona

function cargando() {
var total, cargados, porcentaje;
total = getBytesTotal();
cargados = getBytesLoaded();
porcentaje = Math.floor((cargados*100)/total);
porcentaje_txt.text = porcentaje+" %";
barra_mc.gotoAndStop(porcentaje);
if (cargados == total) {
clearInterval(_global.hiloPrecarga);
play();
}
}
if (_global.hiloPrecarga != undefined){
clearInterval(_global.hiloPrecarga);
}
_global.hiloPrecarga = setInterval(cargando, 1);
stop();

Todo esto que he posteado, es fruto de patearme el foro buscando posibles soluciones y asi, cogiendo un poco de aqui y otro poco de alla, he solucionado el problema.
No significa que esta sea la unica y perfecta solucion, seguro que un programador mas aventajado que yo (lo cual no es dificil jaja) lo solucionaria con un par de lineas y ya esta jaja

Un saludo, espero haber ayudado a alguien :)

Por jumonweb

6 de clabLevel



Genero:Masculino  

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.