Comunidad de diseño web y desarrollo en internet online

Animación, mientras cargan las imágenes de la WEB (jQuery)

Citar            
MensajeEscrito el 03 Feb 2008 06:44 pm
Saludos.

designerFreak planteaba una manera de poner una animación alternativa a las imágenes mientras se cargan.
Pero lo que proponía, sería un pequeño desastre sin no estuviese activado el Javascript, o el CSS.
Además, hay un poco mucho de código, y no parece crossbrowser.

Se me ocurría, que el mejor sistema, sería:
>Un <div>, contiene la imagen.
>Dicho <div>, como fondo, tiene la animación.
>La imagen contenida, tapa el fondo de su contenedor una vez está cargada.
Si se tiene desactivado el CSS o el Javascript la imagen se muestra sin problema.
>Si se tiene javascript, cuando esté cargado el DOM, una función encarga de hacer "invisible" las imagenes del documento.
(style.visibility="hidden")
>El mismo javascript, pone un "onload" a cada imagen, que se encarge de "mostrarla"
(onload="this.style.visibility='hidden'")

Me preguntaba cómo hacerlo con jQuery... y tras leer el manual de Lunatic Lycanthrop, he llegado a algo así:

Código :

<script type="text/javascript" src="http://www.cristalab.com/js/jquery.js"></script>
<script>
$(document).ready(
   function()
     {$('.prel').each(function()
                            {$(this).css('visibility','hidden');
                             $(this).load(function(){$(this).fadeIn('normal');});
                            }
                       );
     }
 );
</script>
<style>
.div   {background-image:url('http://www.estilopets.cl/imagenes/loading.gif');
        background-repeat:no-repeat; background-position:center center;
        border:1px black solid;}
img   {width:inherit; height:inherit;}
</style>
<div class="div" style="width:200px;height:150px;">
<img class="prel" src="http://img220.imageshack.us/img220/8020/alienvspredatorck5il1.jpg" /></div>
<div class="div" style="width:200px;height:160px;">
<img class="prel" src="http://img220.imageshack.us/img220/8250/aliensvspredatorrequiemgz1.jpg" /></div>

Pero se presentan los siguientes problemas:
- $(this).fadeIn('normal'); No hace nada. Debería presentar la imagen, pero no. En cambio, si la sustituyo por "fadeOut", si que la quita. Es decir... que la sintaxis está bien... pero inexplicablemente (para mí) no funciona la función de jQuery.
- En IExplorer7 las imágenes no heredan ('inherit') el tamaño de su capa contenedora.

Me gustaría en primer lugar, saber qué pasa con la dichosa "fadeIn". En segundo lugar, no estaría mal si a alguien se le ocurre, o conoce metodo más ágil (que seguro los hay)


GRACIAS.

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 03 Feb 2008 08:22 pm
Si no te funciona fadeIn por alguna razón, puedes usar

Código :

$(el).fadeTo("normal", 100)


De cualquier manera, fadeIn deberia funcionar... más tarde cuando tenga tiempo checo tu code ;)

Por Lunatic Lycanthrop

Claber

1203 de clabLevel

7 tutoriales

1 ejemplo

Genero:Masculino  

The dark places where wolves access internet with 46,6 kbps

firefox
Citar            
MensajeEscrito el 03 Feb 2008 10:55 pm

Lunatic Lycanthrop escribió:

[...] puedes usar
$(el).fadeTo("normal", 100)
Pues bien... con esto...
$(this).css('opacity','0');
$(this).load(function(){$(this).fadeTo('slow',1);});
, en lugar de esto que tenía:
$(this).css('visibility','hidden');
$(this).load(function(){$(this).fadeIn('normal');});
sí funciona. (pero SOLO EN FIREFOX)

Al parecer... el "fadeTo" toma el parámetro "opacity" entre 0 y 1 (como el Moxilla), de manera que indicando
fadeTo("normal", 100)
, no se produce la transición correcta.

Lo que me sigue despistando, es que no funcione el "fadeIn", pero sí el "fadeOut".


Si consigues averiguarlo...
:love:


>> PD: ¿me rindo con el IE? Creí que el jQuery era corssbrowser...
:cry:

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 04 Feb 2008 01:16 am
Examiné tu codigo. Lo primero que noto es que estas usando la propiedad visibility de css para ocultar las imagenes. Como jQuery trabaja con opacity y display, y no toca el visibility, al darle fadeIn la imagen no se muestra. Esto lo solucioné usando el metodo hide en la imagen, sin parametros (eso la oculta).

Lo segundo que revisé fue lo del ie7, que no hace stretch a las imagenes basado en el alto o ancho del padre. Esto lo solucione inspeccionando las propiedades alto y ancho del padre, con las magnificas capacidades DOM de jQuery, y asignandolas a la imagen.

El codigo es el sgte:

Código :

$(document).ready( function(){
   $('.prel').each( function(){
      $(this).hide();
      $(this).load(function(){
         var alto = $(this).parent().height();
         var ancho = $(this).parent().width();
         $(this).width(ancho).height(alto);
         $(this).fadeIn("slow");
      });
   });
});


Testeado en ie6, ie7, firefox, safari4win y opera. Espero te sirva ;)

Un saludo.

Por Lunatic Lycanthrop

Claber

1203 de clabLevel

7 tutoriales

1 ejemplo

Genero:Masculino  

The dark places where wolves access internet with 46,6 kbps

firefox
Citar            
MensajeEscrito el 04 Feb 2008 01:57 am

Lunatic Lycanthrop escribió:

[...] Como jQuery trabaja con opacity y display, y no toca el visibility, al darle fadeIn la imagen no se muestra. Esto lo solucioné usando el metodo hide en la imagen, sin parametros (eso la oculta).
¿De dónde se abastece tu conocimiento?
Yo quiero...
¿Conoces algún tuto, o guía completa de las funciones de jQuery?
(¿y en castellano?)

Lunatic Lycanthrop escribió:

[...] con las magnificas capacidades DOM de jQuery [...]
Veo que amas profundamente a jQuery.
Veo que aun siendo más lento q Mootools, es más eficaz (y sencillo).
Minipunto, y punto para jQuery.

Lunatic Lycanthrop escribió:

[...]Espero te sirva ;)
Jo...
Imagino que te lo habrán dicho muchas veces, pero...
De mayor, quiero ser como tú.
xD



COMENTARIO FINAL.
Con lo precisado por Lunatic Lycanthrop, se podría tener como un método de precarga de imágenes, con animación de "loading", al código que sigue:

Código :

<script type="text/javascript" src="jquery.js"></script>
<script>
$(document).ready(function()
              {$('.prel').each(function()
                            {$(this).hide();
                             $(this).load(function()
                                           {$(this).width($(this).parent().width()).height($(this).parent().height());
                                            $(this).fadeIn("slow");
                                           });
                            });
              });
</script>

<style>
.div   {background-image:url('http://www.estilopets.cl/imagenes/loading.gif');
        background-repeat:no-repeat; background-position:center center;
        border:1px black solid;}
.div img   {width:inherit; height:inherit;}
</style>

<div class="div" style="width:200px;height:150px;">
<img class="prel" src="url1.jpg" /></div>
<div class="div" style="width:200px;height:160px;">
<img class="prel" src="url2.jpg" /></div>
* salvo error u omisión, o puntualización posterior.

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 04 Feb 2008 12:20 pm
espectacular!!!! ya lo he provado y es una maravilla!!!
GRACIAS por un tubo

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 04 Feb 2008 12:40 pm
encontré que al ir hacia delante o hacia atras desde el navegador o desde la web no se ven las imagenes.. solo se ven cuando recargas la pagina o entras, pero si navegas y vuelves atras, no se ven... que lástima! de todos modos, pedazo de logro! soys unos cracks!

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 04 Feb 2008 02:11 pm

designerFreak escribió:

encontré que al ir hacia delante o hacia atras desde el navegador o desde la web no se ven las imagenes..[...]
¿Estás seguro?
Yo sí que las veo...
(en IE7 y FF2)
¿Tienes la URL donde dices observas ese "error"?

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 04 Feb 2008 04:19 pm
Hay alguna cosilla que no hice al pie de la letra, porque en mi caso por ejemplo, no siempre medirán los mismo de alto las imagenes.

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 04 Feb 2008 05:45 pm
¿Seria posible borrar la URL de mi web de este post, una vez la hayas visto, Rizome?

GRACIAS!

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 04 Feb 2008 11:02 pm
Lo primero...
Tranquilo... esto es un foro donde la gente busca ayuda para realizar mejor su trabajo... todos damos por hecho que no somos perfectos... y de hecho, estamos aquí para aprender.
No te preocupes por mostrarnos tu pagina para que podamos ayudarte, o incluso para que otros puedan aprender (consideralo también como tu contribución c Cristalab)
Aún así, si te inquieta haber puesto aquí la direcc de tu página, escribe un PM a algún MOD, y editarán tu post como pides

Lo segundo...
Ten en cuenta, que mis imagenes no miden lo mismo... de hecho, cada div indica el alto propio de la imagen, y luego el script:
$(this).width($(this).parent().width()).height($(this).parent().height())
se encarga de decirle a cada imagen, lo que debe medir.
Por eso, encuentro una contradicción en tu código. Pues por un lado, no pones los altos en su contenedor... pero luego mantienes esa línea de código (que en consecuencia, deberías quitar)
Hay otros problemillas menores, relativos a cómo has adaptado el script dado.

Lo tercero...
Por lo que dices:

designerFreak escribió:

encontré que al ir hacia delante o hacia atras desde el navegador o desde la web no se ven las imagenes.. [...]
... sí que se ven... lo que pasa, es que no ocurre la animación de "FadeIn" ¿te refieres a eso?
Si te refieres a eso, es normal, pues el "fadeIn", ocurre cuando las imágenes se cargan. Pero si navegas mediante el historial, las imágenes ya están en caché... con lo que nada de eso ocurre.

Lo cuarto...
No uses tablas...
XD
Usa divs
;)

Saludos.

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 04 Feb 2008 11:32 pm
jeje.. me tranquilizo..
Sobre lo de que no se ven las imagenes, te explico:

Uso Mac y he probado en Navigator, Firefox y Safari y en el unico que tengo este problema es en Safari. Las imagenes solo se ven la 1a vez que entras en la pagina, si vuelves a la misma, sea por el menu de la web o el navegador no se cargan las imagenes, solo se ve la animacion de precarga. Entonces si recargo la pagina se vuelven como a descargar desde el servidor.. (se ve la barra de estado como sube), y entonces si se ven..
asi que no se..

Me da rabia porque Safari es el mas comun en Mac i mi preferido.. si no lo soluciono quizas no es muy funcional porque puede que a algun visitante le ocurra lo mismo..

Lo de los divs (lo se, he pecado) pero me era mucho mas comodo armar así la estructura..

saludos y gracias!!

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 05 Feb 2008 09:02 am
¿has probado en otros safaris?
Quizá sea en tu PC...
No se me ocurre, la verdad...
¿has mirado si salta algún error en el javascript?
Prueba poniendo "alerts" en diversas partes del código javascript, para ver en qué punto sale el error...
(esq como no uso safari...)
:)

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 09 Feb 2008 01:59 am
Hola de nuevo,
estuve probando y no conseguí solucionar el tema en Safari, lo prové en otros ordenadores con Safari y sucede lo mismo.. tb ice una prueba y vi que el problema puede estar en el "load", puesto que agregué un slow a la velocidad de ocultar las imagenes al entrar así: (this).hide("slow") y así se ven como desaparecen.. me explico? es decir que la funcion funciona hasta el onload... desaparecen y se ve el gif de la precarga.. :(

k rabia!! estaba guapisimo el efecto y el script, y todo!! y la ayuda que me dieron!! genial!!

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 09 Feb 2008 10:00 am
Veamos.
Hasta ahora, tenemos esto:
<script>
$(document).ready(function()
______{$('.prel').each(function()
____________{$(this).hide();
_____________$(this).load(function()
___________________{$(this).width($(this).parent().width()).height($(this).parent().height());
____________________$(this).fadeIn("slow");
___________________}); }); });
</script>
<div class="div" style="width:200px;height:150px;">
<img class="prel" src="url1.jpg" /></div>

La función "load()", de jQuery, es la función "onLoad" de HTML.
Miremos cómo sustituirla:
<script>
$(document).ready(function()
______{$('.prel').each(function()
____________{$(this).hide("slow"); /* añade "slow", para ver que funciona el jQuery hasta aquí */
_____________/* eliminamos la función "load()" */
_______________}); });
</script>
<div class="div" style="width:200px;height:160px;">
<img class="prel" src="url1.jpg" onload="javascript:$(this).fadeIn('slow');" /></div>
Si funciona así, es que la función "load()" da problemas en Safari.
:o
Si no... miremos de esta otra manera:
(a corregir sobre el código anterior)
<div class="div" style="width:200px;height:150px;">
<img class="prel" src="url1.jpg" id="imagen1" /></div>
<a href="#" onclick="javascript:$('.prel').each(function(){$(this).fadeIn('slow');});">Mostrar todas las imágenes</a>
<br />
<a href="#" onclick="javascript:$('#imagen1').fadeIn('slow');">Mostrar la imagen con id="imagen1"</a>
Si esto funciona, es que el Safari no interpreta correctamente el envento "onload" cuando se navega desde el "historial" del navegador.
Esto sería un problema de verdad...

¿a uno de los "masters" de jQuery en Clab se le ocurre otra cosa?

Ya nos contarás.

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 09 Feb 2008 02:41 pm
Gracias Rizome, te cuento:
La 1a opción no funciona (ocurre lo mismo, no se ven las imagenes sino refrescas la pagina)
La 2a opcion de que aparezcan al dar clic SI que funciona...
así que.. esto parece Poltergeist..
jeje

GRACIAS!!

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 09 Feb 2008 03:12 pm
Osea... que el Safari no detecta el evento "onLoad" cuando se navega por historial.
¿A algún maestro se le ocurre solución/parche?

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 07 Abr 2008 07:39 am
Actualizo este antiguo post, con la aportación de:
penHolder: FadeIn para imagenes con JavaScript

Mi hilo aparece en el buscador buscando "loading imagenes", pero el suyo parece más difícil de encontrar, y ofrece una solución más bonita al mismo problema.

:alabado:

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 14 Abr 2008 02:46 pm
Increible pero cierto, despues de la ultima actualizacion de Safari, el efecto Fade funciona!! aunque navegues por el historial!

lo fuerte es que primero cambié el orden de las llamadas a los css y los Javasscripts + jquery, porque pensé que era mas correcto primiero llamar a las funciones y luego a los css, fue entonces cuando prové y vi que funcionaba. Pensava que era por eso, pero no..
Ahora lo he vuelto ha provar en otro Mac y sucedia lo mismo, no se veia si navegaba por historial, hasta que he actualizado la version de Safari, y ualaa!!

yupiiiii!!

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 25 Jun 2008 08:25 pm
Hola bueno solo una pregunta nada mas ^^, veran yo no domino mucho lo que es JQuery por no decir casi nada, se de programacion en php, asp, .net y algo de js, pero mi problema reside en JQuery, cuando utilizo los diferentes codigos que estan en la red por ejemplo una especie de galerias de fotos como es LightBox o el VideoBox hueno y otros lo unico que hago es arreglar el codigo a mi conveniencia cuando algo resulta mal lo soluciono pero solamene cuando esta dentro de mis conocimientos o intuicion, hueno en fin, mi problema es el bendito IE7(creo k hasta el 4 es el mejor hasta ahora), no funciona como se deve los efectos u animaciones, me he estado preguntando si se deve a las tablas ya que los sites donde muestran estos demos funcionann bien pero en el mio NA!!!. :crap:

Porfa si alguien save cual es la solucion se lo agradeceria mucho. gracias ^^

Por hjakam

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Jun 2008 08:39 am
Primero:
Eso no tiene nada que ver con el tema del hilo.
Hablar de otroas cosas, en hilos que no tienen nada que ver, es una falta de respeto.
Si encima lo haces en un hilo antiguo (de hace casi 5meses), la falta de respeto es aún mayor.

Segundo:
Revisa estos consejos.

Tercero:
Si no dominas JavaScript, usar jQuery, o cualquier otro framework, lo considero una temeridad (es una opinión).
Te recomiendo este manual.

Cuarto:
No, las tablas, no creo que tengan que ver.
Probablemente no funcionen los scripts, porque no los tienes bien configurados (aunque... quién sabe)
:lol:

Quinto:
Las tablas no son buena idea para maquetar una WEB, si es eso lo que estás haciendo.
Te recomiendo que uses DIVs, en su lugar.


Tal y como dices:

hjakam escribió:

adios ¬¬


Saludos.

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 10 May 2009 01:18 pm
¡Hola!

Ha pasado casi un año pero retomo el hilo para comentar que a mi también me daba el error al estar ya guardada la imagen en el caché local.

La solución fue cambiar totalmente la estructura:

Añadí al div de precarga el valor true para el parámetro hidden:
<style>
.div_precarga {background-image:url('images/precarga.gif');
background-repeat:no-repeat; background-position:center center;
border:1px black solid;hidden:true;}
</style>

En la propia imagen indique las acciones en el onload:
1 - Mostrar div de precarga
2 - Oculta la imágen (así si está en la caché por narices hace que salga mediante un fadein
2 - Carga la imagen con el fade in
<img src="...'" width="..." height="'...'" onload="javascript:$(#div_precarga).show();$(this).hide();$(this).fadeIn('."'slow'".');">

Espero que sirva

Saludos

Alex M.

Por alexupv

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Sep 2011 02:50 pm
Hola soy nuevo por aca y a cualquiera que le suceda esto, en IE suele haber muchisismos problemas con el motor de render javascript en todos incluso el 9 con html5.

Primero pongan este script http://www.ie6nomore.com/

y para resolver los problemas con precargas como el ejemplo de load() sin decir que precargar es mejor usar un sistema de cadena

Código Javascript :

$('img').load().fadein()


en vez de:

Código Javascript :

$('img').load(function(){$(this).fadeIn()})


siempre funciona y es lo mismo ya que se detiene el fadeIn hasta que load no termine.

Por obdc

82 de clabLevel

1 tutorial

Genero:Masculino  

web developer

firefox

 

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