Foros del Web » Programando para Internet » Javascript »

Barra de progreso mientras carga una pagina web

Estas en el tema de Barra de progreso mientras carga una pagina web en el foro de Javascript en Foros del Web. tengo una web pesada y necesito que muestre una barra de progreso antes de que cargue la página entera, por favor, llevo buscando días pero ...
  #1 (permalink)  
Antiguo 02/05/2011, 20:13
 
Fecha de Ingreso: noviembre-2010
Mensajes: 58
Antigüedad: 14 años
Puntos: 0
Barra de progreso mientras carga una pagina web

tengo una web pesada y necesito que muestre una barra de progreso antes de que cargue la página entera, por favor, llevo buscando días pero no encuentro una simple barra de progreso con porcentaje que se muestre mientras se cargue la pagina, y que luego aparezca la pagina principal. Si teneis algo que realmente funcione lo agradezco mucho, gracias de antemano foreros!
  #2 (permalink)  
Antiguo 02/05/2011, 23:29
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 19 años
Puntos: 87
Respuesta: Barra de progreso mientras carga una pagina web

Le digo la teoría: Colocar una imagen grande blanca que tape todo (css width:100% etc) y unos divs que creen una barra para que se vaya llenando (si sabe css/html esto es muy facil) y luego colocar onload en cada imagen; con cada onload la barra se va desplasando un poco mas cerca del final (dividir la cantidad de onloads por la cantidad de pixeles que se tiene que mover) y cuando todos los onload se hayan disparado se desaparece la imagen grande blanca y la barrita.
  #3 (permalink)  
Antiguo 03/05/2011, 00:29
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años, 6 meses
Puntos: 236
Respuesta: Barra de progreso mientras carga una pagina web

Holas
Nunca he realizado esto y no se como hacerlo, también cuándo se sube un archivo he querido hacerlo. Yo creo que el compañero de arriba tiene un buen truco pero a mi me parece que hace que tarde un poco más la página y no creo que funcione como debería.
InKarC porfavor si puedes dejanos un ejemplo ya hecho, gracias!-
  #4 (permalink)  
Antiguo 03/05/2011, 00:47
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: Barra de progreso mientras carga una pagina web

Hola:

Un ejemplo similar tenemos en nuestras magníficas wiki-faqs: ¿Cómo hacer una precarga viendo el porcentaje de carga?, pero en vez de programar el evento de carga de las imágenes (onload) se chequea el atributo complete, que se pone verdadero (true) con la carga... el uso del evento puede ser buena idea, pero ya lo había probado y no siempre funciona correctamente, un ejemplo que se podría comprobar fácilmente recargando la página... al estar las imágenes ya cargadas, en algunos navegadores no funciona...

Como comentario adicional, el sistema funciona solo con imágenes, y no con otros medios (multimedia/iframes...)

El caso de las Faqs, se usa una capa en vez de una imagen (creo que es más adecuado... y con medidas distintas a las de las de la página, pero valdría el comentario de los estilos de InKarC.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Última edición por caricatos; 03/05/2011 a las 10:47
  #5 (permalink)  
Antiguo 03/05/2011, 06:02
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Barra de progreso mientras carga una pagina web

esto es lo que yo hice a partir del código de caricatos

javascript
Cita:
function precargar() {
var dibujos = Array.prototype.slice.call(arguments);
var urlimagenes = new Array();
for (var i = 0; i < dibujos.length; i ++) {
urlimagenes[i] = new Image();
urlimagenes[i].src = dibujos[i];
}
return urlimagenes;
}

function precargados(urlimagenes) {
var parciales = true;
for (var i = 0; i < urlimagenes.length; i ++)
parciales = (parciales && urlimagenes[i].complete);
return parciales;
}

function porciento(urlimagenes) {
var parciales = 0;
for (var i = 0; i < urlimagenes.length; i ++)
parciales += (urlimagenes[i].complete) ? 1 : 0;
return parseInt(100 * parciales / urlimagenes.length);
}




function continuar() {
alert('imagenes cargadas')
document.getElementById('loading').style.display = 'none';
}

function cargando() {
document.getElementById("estado").style.width = porciento(imagenes) + "%";
if (precargados(imagenes))
continuar();
else
setTimeout("cargando()", 100);
}

var imagenes;
function ini(){
imagenes = new precargar(
"./fondo_body.png",
"./min_ada.jpg",
"./tot_ada.jpg",
"./pre_carga.jpg",
"./pixel.gif",
"./sprite_header.jpg",
"./sprite_marcos.jpg",
"./footer.jpg"
);

cargando();
}


window.onload = function() {ini();};
CSS
Cita:
#logo_cargando {
background-color: #282828;
text-align: center;
width: 100%;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
z-index: 1000;
}

#loading {
display: block;
background-color: #111;
text-align: center;
width: 100%;
min-height: 100%;
height: auto !important;
filter: alpha(opacity=80);
opacity: .80;
z-index: 1000;
position: fixed;
}

#loading img{
padding-top: 24px;
}

#barra_porcentaje {
font: bold 13px Helvetica, Arial, sans-serif;
text-align: center;
width: 100px;
height: 20px;
border: 1px solid #424141;
position: absolute;
top: 57%;
left: 47%;
}
HTML
Cita:
<div id="loading"> <!-- precarga -->
<div id="barra_porcentaje">
<div style="position:absolute;top:0;left:0;width:100%;h eight: 100%;background-color:#282828"></div>
<div id="estado" style="position:absolute;top:0;left:0;width:1%;hei ght:100%;background-color: #333"></div>
</div>
</div> <!-- /precarga -->
si alguien tiene algo que decir, estoy preparada vuestras criticas
  #6 (permalink)  
Antiguo 03/05/2011, 09:04
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años, 6 meses
Puntos: 236
Respuesta: Barra de progreso mientras carga una pagina web

Hola IsaBelM, hay algunas cosas que no había visto, ¿podrías hacer el favor de explicarme que es lo que hace lo siguiente?
  • Array.prototype.slice.call(arguments)
  • urlimagenes[i].complete
Otra cosa:
Al parecer no dejaste de dónde podemos obtener las imágenes, queria buscar en google pero no se exactamente como debe de ser cada una, si pudieras dejarnos los link dónde podemos descargar esas imagenes porfavor.

Gracias, no lo he analizado bien ya que prefiero ver primero que funcióne y luego lo estudio jeje,

Saludos.
  #7 (permalink)  
Antiguo 03/05/2011, 11:10
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Barra de progreso mientras carga una pagina web

Array.prototype.slice.call(arguments)

urlimagenes[i].complete urlimagenes es un array, i es el indice (la posición de cada imagen en el array) y complete es un atributo que caricatos ya explicó

en cuanto a las imágenes, no las puedes encontrar en ningún sitio que no sea mi pc. puedes usar la que tu tengas en tu equipo o cualquier otras que encuentres por la web

ya por último tendrás que confiar en mi palabra y arriesgarte a analizar bien el script, por que funciona bien
  #8 (permalink)  
Antiguo 03/05/2011, 11:29
Avatar de Pablo Ayala  
Fecha de Ingreso: septiembre-2005
Ubicación: Cancún, México
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 28
Respuesta: Barra de progreso mientras carga una pagina web

Es mejor usar Jquery. Evitarias usar tantas lineas de codigo y funciones.
Checa este link:
http://jqueryui.com/demos/progressbar/

Espero que te sirva...
__________________
Atentamente,

Pablo Ayala.
Si vas a responder algo en el foro que sea con amabilidad.
  #9 (permalink)  
Antiguo 03/05/2011, 11:49
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: Barra de progreso mientras carga una pagina web

Cita:
Iniciado por Pablo Ayala Ver Mensaje
Es mejor usar Jquery. Evitarias usar tantas lineas de codigo y funciones.
Checa este link:
http://jqueryui.com/demos/progressbar/

Espero que te sirva...
¡Qué manía con las librerías...?

Evitar escribir unas "pocas" líneas, y añadir un peso de varios ks me parece absurdo.

Por cierto, el array podría ser perfectamente la colección document.images.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #10 (permalink)  
Antiguo 03/05/2011, 14:45
Avatar de Pablo Ayala  
Fecha de Ingreso: septiembre-2005
Ubicación: Cancún, México
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 28
Respuesta: Barra de progreso mientras carga una pagina web

jajajajajaja.... bueno,

Nunca me había preocupado por unos cuantos kb, tal vez en lugar de criticar mi propuesta para la solución, como moderador del sitio deberías explicarnos cuanto pesa la librería y por que no usarla.

Este sitio considero que no es para criticar si no para compartir conocimientos.


Saludos Sr. Moderador.
__________________
Atentamente,

Pablo Ayala.
Si vas a responder algo en el foro que sea con amabilidad.
  #11 (permalink)  
Antiguo 03/05/2011, 15:25
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Barra de progreso mientras carga una pagina web

Cita:
deberías explicarnos cuanto pesa la librería y por que no usarla.
en serio, ya se ha hablado mucho sobre ese debate tanto aqui como en la web. deberias hacer una busqueda.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #12 (permalink)  
Antiguo 03/05/2011, 16:53
Avatar de Pablo Ayala  
Fecha de Ingreso: septiembre-2005
Ubicación: Cancún, México
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 28
Respuesta: Barra de progreso mientras carga una pagina web

bueno esta bien, lo acepto...
trate de ayudar sin consultar primero cuanto pesa y por que no conviene....

La proxima vez, antes de ayudar...
Primero leere por que usarla o por que no? cuanto pesas y si conviene o no?

Solo trate de compartir algo que me funciono a mi... y donde no vi que la pagina tarde mas de 18ms en cargar...

Saludos!!
__________________
Atentamente,

Pablo Ayala.
Si vas a responder algo en el foro que sea con amabilidad.
  #13 (permalink)  
Antiguo 03/05/2011, 17:19
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: Barra de progreso mientras carga una pagina web

Cita:
Iniciado por Pablo Ayala Ver Mensaje
bueno esta bien, lo acepto...
trate de ayudar sin consultar primero cuanto pesa y por que no conviene....

La proxima vez, antes de ayudar...
Primero leere por que usarla o por que no? cuanto pesas y si conviene o no?

Solo trate de compartir algo que me funciono a mi... y donde no vi que la pagina tarde mas de 18ms en cargar...

Saludos!!
Todos los que tenemos conexiones rápidas nos despreocupamos por algunas cosas que difícilmente llegan a quienes (y aún son muchos) no tienen la suerte de tener alta velocidad...

Y los foros pueden valer para criticar... pero lo que hemos tratado es código que yo mismo he escrito, así que lo que dices de compartir no parece ser un comentario del todo adecuado...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #14 (permalink)  
Antiguo 04/05/2011, 15:22
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 19 años
Puntos: 87
Respuesta: Barra de progreso mientras carga una pagina web

Compartir codigo que funciona bajo un framework es valido; excepto que el posteador original haya indicado que no debe/puede usar frameworks.

Vivo en Colombia; un pais tercermundista (que bajo los ojos de las personas en paises desarrollados vivimos en chosas y nos transportamos en burros) y aun asi aqui ya no existen conexiones de menos de 1 MB, asi que todo ese bla bla bla sobre "conexiones lentas" es completamente falso.
  #15 (permalink)  
Antiguo 04/05/2011, 15:48
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Barra de progreso mientras carga una pagina web

@inkarc,
para empezar nadie señalo pais alguno. personalmente el factor del peso yo no le doy mucha prioridad. un factor que considero mas importante aun es la cantidad de recursos que demanda las librerias. es obvio que en un computador las caracteristicas adversas no son tan notables comparados con otros dispositivos que no poseen el mismo nivel de rendimiento, por ejemplo un celular. la otra vez estaba revisando cuanta memoria ocupa tan solo cargar el framework jquery y estime que mas o menos requiere cerca de 15MB. esa cantidad es poco, pero de nuevo, es relativo de dispositivo a dispositivo. lo que me parece una chorrada mas aun es utilizar una libreria para solo usar una porcion bien pequeña de ésta cuando se puede hacer con pocas lineas (en su totalidad) de javascript.

nota: no quiero decir que las librerias son malas por naturaleza. soy del pensamiento que cada cual decida lo que hará pero que sea conciente a lo que se enfrenta.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #16 (permalink)  
Antiguo 04/05/2011, 16:01
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: Barra de progreso mientras carga una pagina web

Cita:
Iniciado por InKarC Ver Mensaje
Compartir codigo que funciona bajo un framework es valido; excepto que el posteador original haya indicado que no debe/puede usar frameworks.

Vivo en Colombia; un pais tercermundista (que bajo los ojos de las personas en paises desarrollados vivimos en chosas y nos transportamos en burros) y aun asi aqui ya no existen conexiones de menos de 1 MB, asi que todo ese bla bla bla sobre "conexiones lentas" es completamente falso.
Bueno, bueno... seguimos con la deducción al absurdo...

En España se puede contratar hasta 50 megas (no es la razón de la pregunta...), pero en mi caso son solo 3 megas, y en ocasiones las conexiones son inestables o simplemente lentas y creo que debe pasar en muchos sitios, así que me interesa mucho el peso de mis páginas...

Has pensado en cuántos internautas tienen accesos lentos... es válido que solo te interesen tus visitantes con adsl, así como hace aprox. un lustro la gran mayoría de páginas bastaba con que se viesen en el explorer para ser publicadas; pero considerando este caso concreto (podrías tener razón en otros casos), si con menos de 1 "K", y pocas líneas; y sobre todo fáciles de comprender e implementar, se consigue el objetivo deseado, no te parece que tiene poco sentido usar unas líneas más difíciles de comprender, y ese incremento del peso...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #17 (permalink)  
Antiguo 04/05/2011, 16:58
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 19 años
Puntos: 87
Respuesta: Barra de progreso mientras carga una pagina web

Los celulares son un mundo completamente aparte ya de por si muchos ni CSS muestran en lo absoluto asi que es bastante invalido compararlos con estos.

La mayoria de personas en latinoamerica + españa (en computadores de escritorio) tienen acceso a internet de 1MB o mas.

El procesamiento cuando maneja operaciones complejas muy probablemente esta mas optimizado en jQuery que en cualquier script que el promedio de desarrolladores podrian crear.

-------------------------------------

Volviendo al tema...

IsaBelM sabe mucho de javascript seguramente mas que yo pero a veces se complica demasiado para la resolucion de problemas. Aquí un código mucho mas corto de un cargador y lo probe en diferentes navegadores (usando el boton atras y todo eso) y funciona perfectamente.

Sip, usando jQuery... (aunque la parte mas importante (CORE) es puro javascript y no deberia ser dificil implantarlo en otros ambientes)

Código Javascript:
Ver original
  1. jQuery(function($){
  2.         var items_cargar = $("img") //Seleccionas las imagenes a cargar
  3.        
  4.         var moverse = $("#contendor-barra").width() / items_cargar.length;
  5.        
  6.         items_cargar.each(function(){ //CORE Procesar cada imagen para ver si ya esta cargada o si necesita un evento "onload"
  7.             var pic=new Image();
  8.             pic.src= this.src;
  9.             if(pic.complete) cargada(); else {pic.onload= cargada; pic.onError = cargada };
  10.         })
  11.        
  12.         function cargada(){ // Funcion que se ejecuta cada vez que carga una imagen (o si tira un error) o si estaba cargada desde antes
  13.                 $("#barra").animate({"left": "+=" + moverse}, 100, function(){
  14.                         if($("#barra").css("left").replace("px","") >= 0){
  15.                                 $("#pantalla_blanca").hide()
  16.                         }          
  17.                 })
  18.         }
  19.            
  20. })

Si lo quieren ver funcionando y con todo el CSS/HTML aqui esta: http://jsfiddle.net/R6ce9/1/

Última edición por InKarC; 04/05/2011 a las 17:28
  #18 (permalink)  
Antiguo 05/05/2011, 04:39
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Barra de progreso mientras carga una pagina web

Cita:
Iniciado por InKarC Ver Mensaje
Volviendo al tema...

IsaBelM sabe mucho de javascript seguramente mas que yo pero a veces se complica demasiado para la resolucion de problemas
querido InKarC, no entendiendo a qué viene este comentario. revisando el tema, veo que yo solamente di una opción y no he juzgado ni he entrado en el debate de jquery sí o no por que me es indiferente. lo que quiero decir es que no es necesario meter a nadie en medio para reforzar tu tesis. como esto es un debate que ya aburre, no estoy dispuesta dar pie a que se prolongue
  #19 (permalink)  
Antiguo 05/05/2011, 12:41
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 19 años
Puntos: 87
Respuesta: Barra de progreso mientras carga una pagina web

Cita:
querido InKarC, no entendiendo a qué viene este comentario. revisando el tema, veo que yo solamente di una opción y no he juzgado ni he entrado en el debate de jquery sí o no por que me es indiferente
Querida IsaBelM; cuando critique tu código no me refería a si usaste o no jQuery ni nada relacionado, me refería a la lógica de programación para resolver este problema; aquí esta -casi- el mismo cargador que publique anteriormente en versión javascript puro (version en jsfiddle):

Código Javascript:
Ver original
  1. // ! Colocar este codigo antes del </body> para mayor efectividad!!
  2.  var items_cargar = document.getElementsByTagName("img") //Seleccionas las imagenes
  3.         var moverse = document.getElementById("contendor-barra").offsetWidth / items_cargar.length;
  4.        for(var x=0; x<items_cargar.length;x++){
  5.             var pic=new Image();
  6.             pic.src= items_cargar[x].src;
  7.             if(pic.complete) cargada(); else {pic.onload= cargada; pic.onError = cargada };
  8.         }
  9.         function cargada(){ // Funcion que se ejecuta cada vez que carga una imagen
  10.             var barra = document.getElementById("barra");
  11.              var total_move = barra.offsetLeft+moverse
  12.              barra.style.left = total_move + "px"
  13.              if(barra.style.left.replace("px","") >= 0){                 
  14.                 document.getElementById("pantalla_blanca").style.display = "none";
  15.              }
  16.         }

Me dan 5 karmas positivos los novatos pero tu los borras todos con uno negativo... LOL

Cita:
si alguien tiene algo que decir, estoy preparada vuestras criticas

Última edición por InKarC; 05/05/2011 a las 12:56
  #20 (permalink)  
Antiguo 05/05/2011, 22:06
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 19 años
Puntos: 87
Respuesta: Barra de progreso mientras carga una pagina web

Cita:
Valoración negativa en Barra de progreso... por caricatos que comentó 'No sabía que te interesaba eso del Karma...' el 05/05/2011 a las 16:41
Vaya, ahora esta mal hecho interesarse por el karma, y esto vino de un moderador! Asi que probablemente tiene la razon y meresco multiples calificaciones negativas por ese vil y egoista interes en mis venas!... lol

mmm... me acabo de dar cuenta que el codigo que critique en realidad era originalmente de caricatos... coincidencia? -_-'

Última edición por InKarC; 05/05/2011 a las 22:32
  #21 (permalink)  
Antiguo 05/05/2011, 23:47
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: Barra de progreso mientras carga una pagina web

Hola:

El tema lo cerramos porque está resuelto y derivando en algo fuera de contexto.

Con respecto al Karma, el hecho de ser moderador no me quita el privilegio de premiar con Karma (o castigar si me lo pareciese) los mensajes y comentarios que a mi me gusten (o desagraden)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Etiquetas: barra, carga, mientras, progreso
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 14:30.