Foros del Web » Programando para Internet » Javascript »

Mostrar una capa despues de que pase algo

Estas en el tema de Mostrar una capa despues de que pase algo en el foro de Javascript en Foros del Web. Hola quiero hacer que cuando una imagen ya ha llegado a los 456 px de anchura se muestre un cuadro de aviso y luego cuando ...
  #1 (permalink)  
Antiguo 11/08/2012, 09:14
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
Pregunta Mostrar una capa despues de que pase algo

Hola quiero hacer que cuando una imagen ya ha llegado a los 456 px de anchura se muestre un cuadro de aviso y luego cuando empieza a poner se mas pequena es decir que tener menos anchura se oculto. Y luego si la imagen llega otra vez tambien se muestre y luego oculte.
Tengo el siguiente codigo javascript

Código Javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Documento sin título</title>
  6. <style type="text/css">
  7. #imagen {
  8.     width:20px;
  9.     height:20px;
  10.     border:thin;
  11.     border-width:1px;
  12.     border-radius:1px;
  13.     -webkit-transition:all 2s ease;
  14.     -moz-transition:all 1s ease;
  15.     -o-transition:all 1s ease;
  16.     transition:all 1s ease;
  17. }
  18. </style>
  19. <script language="javascript">
  20. function agrandar(){
  21. document.getElementById('imagen').style.width='456px';
  22. document.getElementById('imagen').style.height='473px';
  23. document.getElementById('imagen').style.borderRadius='20px';
  24. setTimeout(mostrar(),2000);
  25. }
  26. function volver() {
  27. document.getElementById('imagen').style.width='20px';
  28. document.getElementById('imagen').style.height='20px';
  29. document.getElementById('imagen').style.borderRadius='1px'
  30. }
  31. function mostrar() {
  32. var imagen = document.images[0].width;
  33. if(imagen == 456){
  34. document.getElementById('mostrar').style.visibility = 'visible';
  35. } else {
  36. document.getElementById('mostrar').style.visibility = 'hidden';
  37. }
  38.  
  39. }
  40.  
  41. </script>
  42. </head>
  43.  
  44. <body onload="mostrar()">
  45. <img src="images2/combate_gatuno.jpg" id="imagen" onmouseover="agrandar()" onclick="volver();" />
  46. <span style="position:absolute; left: 462px; top: 146px; width: 210px; height: 41px; background-color:#0CF; padding:10px; border-radius:10px; visibility:hidden;" id="mostrar">Pulse en la imagen para volver a su estado anterior.</span>
  47. </body>
  48. </html>

Pero el problema es que la capa se muestra solo si ha llegado a los 456 px y el raton esta sobre la imagen pero yo quiero que no aga falta que este sobre la imagen y luego tambien desaparece si solo no tiene los 456 px y el raton esta sobre la imagen...
Tengo la pagina subida aqui por si quieren verla : http://javascriptcsspr.comli.com/css/imagen_agrandar.html

Gracias :)
  #2 (permalink)  
Antiguo 11/08/2012, 10:26
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Mostrar una capa despues de que pase algo

yo haría esto
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4.  <head>
  5.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6.   <title>
  7.    Documento sin título
  8.   </title>
  9.   <style type="text/css">
  10. /*<![CDATA[*/
  11.  #imagen {
  12.  width:20px;
  13.  height:20px;
  14.  border:thin;
  15.  border-width:1px;
  16.  border-radius:1px;
  17.  -webkit-transition:all 2s ease;
  18.  -moz-transition:all 1s ease;
  19.  -o-transition:all 1s ease;
  20.  transition:all 1s ease;
  21.  }
  22.  /*]]>*/
  23.   </style>
  24.   <script type="text/javascript">
  25. //<![CDATA[
  26.  function agrandar(){
  27.  document.getElementById('imagen').style.width='456px';
  28.  document.getElementById('imagen').style.height='473px';
  29.  document.getElementById('imagen').style.borderRadius='20px';
  30.  
  31.  setTimeout('mostrar()', 1500);
  32.  }
  33.  function volver() {
  34.  document.getElementById('imagen').style.width='20px';
  35.  document.getElementById('imagen').style.height='20px';
  36.  document.getElementById('imagen').style.borderRadius='1px'
  37.  document.getElementById('mostrar').style.visibility = 'hidden';
  38.  document.getElementById('mostrar').style.opacity = '0.01';
  39.  }
  40.  function mostrar() {
  41.  var imagen = document.images[0].width;
  42.  if(imagen == 456){
  43.  document.getElementById('mostrar').style.visibility = 'visible';
  44.  document.getElementById('mostrar').style.opacity = '1';
  45.  }
  46.  }
  47.  //]]>
  48.   </script>
  49.  </head>
  50.  <body>
  51.   <img src="http://javascriptcsspr.comli.com/css/images2/combate_gatuno.jpg" id="imagen" onmouseover="agrandar()" onclick="volver();" alt="" name="imagen" /> <span style=
  52.  "position:absolute; left: 480px; top: 146px; width: 210px; height: 41px; background-color:#0CF; padding:10px; border-radius:10px; visibility:hidden; opacity: 0.01; -webkit-transition:all 2s ease; -moz-transition:all 1s ease; -o-transition:all 1s ease; transition:all 1s ease;"
  53.  id="mostrar">Pulse en la imagen para volver a su estado anterior.</span>
  54.  </body>
  55. </html>

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 11/08/2012, 11:05
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
Respuesta: Mostrar una capa despues de que pase algo

Cita:
Iniciado por emprear Ver Mensaje
yo haría esto
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4.  <head>
  5.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6.   <title>
  7.    Documento sin título
  8.   </title>
  9.   <style type="text/css">
  10. /*<![CDATA[*/
  11.  #imagen {
  12.  width:20px;
  13.  height:20px;
  14.  border:thin;
  15.  border-width:1px;
  16.  border-radius:1px;
  17.  -webkit-transition:all 2s ease;
  18.  -moz-transition:all 1s ease;
  19.  -o-transition:all 1s ease;
  20.  transition:all 1s ease;
  21.  }
  22.  /*]]>*/
  23.   </style>
  24.   <script type="text/javascript">
  25. //<![CDATA[
  26.  function agrandar(){
  27.  document.getElementById('imagen').style.width='456px';
  28.  document.getElementById('imagen').style.height='473px';
  29.  document.getElementById('imagen').style.borderRadius='20px';
  30.  
  31.  setTimeout('mostrar()', 1500);
  32.  }
  33.  function volver() {
  34.  document.getElementById('imagen').style.width='20px';
  35.  document.getElementById('imagen').style.height='20px';
  36.  document.getElementById('imagen').style.borderRadius='1px'
  37.  document.getElementById('mostrar').style.visibility = 'hidden';
  38.  document.getElementById('mostrar').style.opacity = '0.01';
  39.  }
  40.  function mostrar() {
  41.  var imagen = document.images[0].width;
  42.  if(imagen == 456){
  43.  document.getElementById('mostrar').style.visibility = 'visible';
  44.  document.getElementById('mostrar').style.opacity = '1';
  45.  }
  46.  }
  47.  //]]>
  48.   </script>
  49.  </head>
  50.  <body>
  51.   <img src="http://javascriptcsspr.comli.com/css/images2/combate_gatuno.jpg" id="imagen" onmouseover="agrandar()" onclick="volver();" alt="" name="imagen" /> <span style=
  52.  "position:absolute; left: 480px; top: 146px; width: 210px; height: 41px; background-color:#0CF; padding:10px; border-radius:10px; visibility:hidden; opacity: 0.01; -webkit-transition:all 2s ease; -moz-transition:all 1s ease; -o-transition:all 1s ease; transition:all 1s ease;"
  53.  id="mostrar">Pulse en la imagen para volver a su estado anterior.</span>
  54.  </body>
  55. </html>

Saludos
Gracias por tu respuesta pero la cosa esq casi funciona como lo quiero .
Lo que si me funciono es que cuando le doy click en la imagen desaparece pero lo que no quiero esq cuando al abrir la pagina, la imagen es pequena y voy con el raton y empieza a agrandarse(esto si) pero cuando llega al tamano maximo o el tamano que le he puesto no aparece el span pero si aparece si salgo de la imagen y voy denuevo con el raton sobre ella.. Es decir que cuando ya esta grande debo de salir con el raton de la imagen y volver a ir, esto no lo quiero. Quiero que cuando termine de ser grande aparesca el span independientemente del raton.


Me puedes ayudar con ests pls

Un saludo
  #4 (permalink)  
Antiguo 11/08/2012, 14:02
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Mostrar una capa despues de que pase algo

Como yo lo interpreto tiene que suceder esto

Abris la página --> solo se ve la miniatura
haces mouseover sobre la miniatura --> la miniatura se expande hasta 456px y con una pequeña demora se muestra la leyenda
si desplazás el cursor por el resto de la página --> todo que da tal cual
click en la imagen --> se restablece el tamaño a la miniatura y se oculta el mensaje

Ahora, el código que yo te puse hace exactamente eso (IE, Firefox, Opera), pero acabo de descubrir que en Chrome NO, así que es muy probable que estés utilizando Chrome. Desde luego que en IE la transición no se muestra

Para arreglarlo, hice esto

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4.  <head>
  5.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6.   <title>
  7.    Documento sin título
  8.   </title>
  9.   <style type="text/css">
  10. /*<![CDATA[*/
  11.  #imagen {
  12.  width:20px;
  13.  height:20px;
  14.  border:thin;
  15.  border-width:1px;
  16.  border-radius:1px;
  17.  -webkit-transition:all 2s ease;
  18.  -moz-transition:all 1s ease;
  19.  -o-transition:all 1s ease;
  20.  transition:all 1s ease;
  21.  }
  22.  /*]]>*/
  23.   </style>
  24.   <script type="text/javascript">
  25. //<![CDATA[
  26.  function agrandar(){
  27.  document.getElementById('imagen').style.width='456px';
  28.  document.getElementById('imagen').style.height='473px';
  29.  document.getElementById('imagen').style.borderRadius='20px';
  30.  
  31.  setTimeout('mostrar()', 1500);
  32.  }
  33.  function volver() {
  34.  document.getElementById('imagen').style.width='20px';
  35.  document.getElementById('imagen').style.height='20px';
  36.  document.getElementById('imagen').style.borderRadius='1px'
  37.  document.getElementById('mostrar').style.visibility = 'hidden';
  38.  document.getElementById('mostrar').style.opacity = '0.01';
  39.  }
  40.  function mostrar() {
  41.  var imagen = document.getElementById('imagen').style.width;
  42.  if(imagen == '456px'){
  43.  document.getElementById('mostrar').style.visibility = 'visible';
  44.  document.getElementById('mostrar').style.opacity = '1';
  45.  }
  46.  }
  47.  //]]>
  48.   </script>
  49.  </head>
  50.  <body>
  51.   <img src="http://javascriptcsspr.comli.com/css/images2/combate_gatuno.jpg" id="imagen" onmouseover="agrandar()" onclick="volver();" alt="" name="imagen" /> <span style=
  52.  "position:absolute; left: 480px; top: 146px; width: 210px; height: 41px; background-color:#0CF; padding:10px; border-radius:10px; visibility:hidden; opacity: 0.01; -webkit-transition:all 2s ease; -moz-transition:all 1s ease; -o-transition:all 1s ease; transition:all 1s ease;"
  53.  id="mostrar">Pulse en la imagen para volver a su estado anterior.</span>
  54.  </body>
  55. </html>

Es decir, utilizo
var imagen = document.getElementById('imagen').style.width;
if(imagen == '456px'){

en lugar de
var imagen = document.images[0].width;
if(imagen == 456){


demo:
http://foros.emprear.com/html/agrandar.html

Salvo por lo de la transición, en ahora en todos hace lo mismo, incluido Chrome
Si no es eso lo que estás buscando, sinceramente no lo entiendo

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 11/08/2012, 14:47
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
De acuerdo Respuesta: Mostrar una capa despues de que pase algo

Cita:
Iniciado por emprear Ver Mensaje
Como yo lo interpreto tiene que suceder esto

Abris la página --> solo se ve la miniatura
haces mouseover sobre la miniatura --> la miniatura se expande hasta 456px y con una pequeña demora se muestra la leyenda
si desplazás el cursor por el resto de la página --> todo que da tal cual
click en la imagen --> se restablece el tamaño a la miniatura y se oculta el mensaje

Ahora, el código que yo te puse hace exactamente eso (IE, Firefox, Opera), pero acabo de descubrir que en Chrome NO, así que es muy probable que estés utilizando Chrome. Desde luego que en IE la transición no se muestra

Para arreglarlo, hice esto

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4.  <head>
  5.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6.   <title>
  7.    Documento sin título
  8.   </title>
  9.   <style type="text/css">
  10. /*<![CDATA[*/
  11.  #imagen {
  12.  width:20px;
  13.  height:20px;
  14.  border:thin;
  15.  border-width:1px;
  16.  border-radius:1px;
  17.  -webkit-transition:all 2s ease;
  18.  -moz-transition:all 1s ease;
  19.  -o-transition:all 1s ease;
  20.  transition:all 1s ease;
  21.  }
  22.  /*]]>*/
  23.   </style>
  24.   <script type="text/javascript">
  25. //<![CDATA[
  26.  function agrandar(){
  27.  document.getElementById('imagen').style.width='456px';
  28.  document.getElementById('imagen').style.height='473px';
  29.  document.getElementById('imagen').style.borderRadius='20px';
  30.  
  31.  setTimeout('mostrar()', 1500);
  32.  }
  33.  function volver() {
  34.  document.getElementById('imagen').style.width='20px';
  35.  document.getElementById('imagen').style.height='20px';
  36.  document.getElementById('imagen').style.borderRadius='1px'
  37.  document.getElementById('mostrar').style.visibility = 'hidden';
  38.  document.getElementById('mostrar').style.opacity = '0.01';
  39.  }
  40.  function mostrar() {
  41.  var imagen = document.getElementById('imagen').style.width;
  42.  if(imagen == '456px'){
  43.  document.getElementById('mostrar').style.visibility = 'visible';
  44.  document.getElementById('mostrar').style.opacity = '1';
  45.  }
  46.  }
  47.  //]]>
  48.   </script>
  49.  </head>
  50.  <body>
  51.   <img src="http://javascriptcsspr.comli.com/css/images2/combate_gatuno.jpg" id="imagen" onmouseover="agrandar()" onclick="volver();" alt="" name="imagen" /> <span style=
  52.  "position:absolute; left: 480px; top: 146px; width: 210px; height: 41px; background-color:#0CF; padding:10px; border-radius:10px; visibility:hidden; opacity: 0.01; -webkit-transition:all 2s ease; -moz-transition:all 1s ease; -o-transition:all 1s ease; transition:all 1s ease;"
  53.  id="mostrar">Pulse en la imagen para volver a su estado anterior.</span>
  54.  </body>
  55. </html>

Es decir, utilizo
var imagen = document.getElementById('imagen').style.width;
if(imagen == '456px'){

en lugar de
var imagen = document.images[0].width;
if(imagen == 456){


demo:
[url]http://foros.emprear.com/html/agrandar.html[/url]

Salvo por lo de la transición, en ahora en todos hace lo mismo, incluido Chrome
Si no es eso lo que estás buscando, sinceramente no lo entiendo

Saludos
Gracias por tu respuesta !

La verdad esq ahora si me funciona perfectamente como queria en chrome pero en firefox y iexplorer que tambien los tengo instalados al ir con el raton la imagen directamente se pone grande sin el efecto. Sera que tengo algo desactivado en ellos?

Gracias
  #6 (permalink)  
Antiguo 11/08/2012, 17:57
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Mostrar una capa despues de que pase algo

en ie no te va a funcionar el transition del css, en Firefox se ve bien el efecto,estoy usando la version 12
saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 11/08/2012, 18:09
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: Mostrar una capa despues de que pase algo

Una duda : si ya están usando JS ¿por qué no todo con JS y se dejan de embromar?.

Las animaciones de CSS no combinan con eventos para que se dispare una función (como pasa por ejemplo con la marquesina, que provee un modo de saber cuando se llega a un borde).
La lectura la hacemos de manera indirecta (y en este caso particular yo hubiera usado offsetWidth, aunque son gustos).

Pero si se le va asignando los valores de animación con javascript, ya los tenemos en la función; con leerlos de ahí es suficiente.
  #8 (permalink)  
Antiguo 12/08/2012, 01:12
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
Respuesta: Mostrar una capa despues de que pase algo

Cita:
Iniciado por furoya Ver Mensaje
Una duda : si ya están usando JS ¿por qué no todo con JS y se dejan de embromar?.

Las animaciones de CSS no combinan con eventos para que se dispare una función (como pasa por ejemplo con la marquesina, que provee un modo de saber cuando se llega a un borde).
La lectura la hacemos de manera indirecta (y en este caso particular yo hubiera usado offsetWidth, aunque son gustos).

Pero si se le va asignando los valores de animación con javascript, ya los tenemos en la función; con leerlos de ahí es suficiente.
El efecto con css3 sale mejor que con javascript
  #9 (permalink)  
Antiguo 12/08/2012, 01:27
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
Respuesta: Mostrar una capa despues de que pase algo

Cita:
Iniciado por emprear Ver Mensaje
en ie no te va a funcionar el transition del css, en Firefox se ve bien el efecto,estoy usando la version 12
saludos
Hola gracias por tu respuesta, la verdad esq yo tenia la version 5.0 de firefox, al actualizarlo si me funciona aunque no como en chrome pero si funciona.
Y para el internet explorer encontre un post que todabia no he provado pero lo pongo por si alguien quiere ver lo:
http://coding.smashingmagazine.com/2010/04/28/css3-solutions-for-internet-explorer/
  #10 (permalink)  
Antiguo 12/08/2012, 07:04
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: Mostrar una capa despues de que pase algo

Por el título de tu post, patilanz, ya nos damos cuenta de que no tienes la menor idea de lo que estamos hablando.
Por lo tanto no deberías discutir.

Veamos, ¿qué crees que hay detrás de las animaciones CSS?
tic...

...tac

tic...

...tac

tic...

...tac
Exactamente. Se hacen con javascript. En el caso de Internet Explorer, también puede aparecer un visualscript para aprovechar sus DX, que funcionan en Windows.

Si se ven mejor en Chrome, es porque ese navegador desarrolló un motor JS orientado a animaciones.

Con respecto a esa página que encontraste, no dice más de lo que ya debatimos extensamente en estos foros. Lo rescatable es que en vez de sugerir el uso de archivos de "parche" muestra cómo se escribe cada sintaxis propietaria (que es lo mismo que hacen los parches, pero con más vueltas). La única excepción es la de las esquinas redondas, pero acá también mostramos cómo se hace en el código.

En este caso, el JS es basicamente para lectura, así que no es tan grave. Pero la combinación con CSS Script suele ser trágica y a veces hay que inventar engendros vergonzosos para juntarlas.

Cómo calculo height de un div y se lo pongo al css?
  #11 (permalink)  
Antiguo 12/08/2012, 10:51
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
Respuesta: Mostrar una capa despues de que pase algo

Cita:
Iniciado por furoya Ver Mensaje
Por el título de tu post, patilanz, ya nos damos cuenta de que no tienes la menor idea de lo que estamos hablando.
Por lo tanto no deberías discutir.

Veamos, ¿qué crees que hay detrás de las animaciones CSS?
tic...

...tac

tic...

...tac

tic...

...tac
Exactamente. Se hacen con javascript. En el caso de Internet Explorer, también puede aparecer un visualscript para aprovechar sus DX, que funcionan en Windows.

Si se ven mejor en Chrome, es porque ese navegador desarrolló un motor JS orientado a animaciones.

Con respecto a esa página que encontraste, no dice más de lo que ya debatimos extensamente en estos foros. Lo rescatable es que en vez de sugerir el uso de archivos de "parche" muestra cómo se escribe cada sintaxis propietaria (que es lo mismo que hacen los parches, pero con más vueltas). La única excepción es la de las esquinas redondas, pero acá también mostramos cómo se hace en el código.

En este caso, el JS es basicamente para lectura, así que no es tan grave. Pero la combinación con CSS Script suele ser trágica y a veces hay que inventar engendros vergonzosos para juntarlas.

[url=http://www.forosdelweb.com/f13/como-calculo-height-div-pongo-css-1002604/] Cómo calculo height de un div y se lo pongo al css?[/url]

Gracias por tu respuesta . La verdad esq se algo pero no tanto. Dije que el css3 sale mejor que javascript por los efectos que sepa ahora mismo. Creo que son mejores pero la compatibildad con los navegadores no es nada buena ... puede que javascript sea mejor pero css3 es mas facil por lo que yo sepa
  #12 (permalink)  
Antiguo 12/08/2012, 18:13
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: Mostrar una capa despues de que pase algo

Cita:
Iniciado por patilanz Ver Mensaje
Gracias por tu respuesta . La verdad esq se algo pero no tanto. Dije que el css3 sale mejor que javascript por los efectos que sepa ahora mismo. Creo que son mejores pero la compatibildad con los navegadores no es nada buena ... puede que javascript sea mejor pero css3 es mas facil por lo que yo sepa
Sí, eso no te lo pienso discutir. El CSS Script es algo parecido a las librerías : formas reducidas y simplificadas de disparar un escript que está enlazado a la página; o al navegador, porque estos documentos con los escripts para CSS3 vienen con cada navegador.
Pero como no todos trabajan bien, la compatibilidad aún es limitada.

Igual, no es tan difícil hacer animaciones "paso a paso" con JS. Dependiendo de la cantidad de cambios que haga en cada vuelta, puede que haya que bajarle la velocidad para que no se "trabe", pero eso puede pasar también con CSS.

Lo de reemplazar por

Código:
...
var imagen = document.getElementById('imagen').offsetWidth;
  if(imagen == '456'){
...
que le comentaba a emprear es porque justamente ese valor lo devuelven igual todos lo navegadores. Al final es más práctico que leer el CSS.
O, repito, en realidad yo lo uso más para ahorrarme problemas.
  #13 (permalink)  
Antiguo 23/09/2012, 13:42
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: Mostrar una capa despues de que pase algo

Más arriba dije

Cita:
Las animaciones de CSS no combinan con eventos para que se dispare una función (como pasa por ejemplo con la marquesina, que provee un modo de saber cuando se llega a un borde).
Me la paso criticando a los que vienen a poner burradas, porque después soy uno de los que tiene que andar corrigiendo sus temas en los mensajes posteriores.

Pero las mías (salvo muy honrosas excepciones) no las corrige nadie.

Estaban esperando que volviera, ¿no?.


Aproveché mis vacaciones del Foro para hacer esa versión JS del efecto que busca(ba) patilanz; porque otra cosa que dije es que se podía hacer en javascript.
Por lo general estos inventos están llenos de variables y de contadores de tiempo, y parecen más complejos de lo que son; así que para que se haga amigable al destriparlo me basé en el ejemplo de emprear, que seguramente ya fue estudiado. (Supongo, mi estimado, que no me va a hacer reclamos por eso, al fin y al cabo, posteamos bajo la premisa del CC.)

Para hacerlo aún más sencillo, usé una animación del tipo linear; no porque no se pueda hacer una curva bezier para "amortiguar" el inicio y/o el fin de la transición, sino más que nada para no llenar el ejemplo de código innecesario.

De lo que no me salvé es del código de compatibilidad (supongo que anda desde IE6 y los principales navegadores para Windows).
Un caso especial es el border-radius. Hacerlo funcionar en versiones viejas de Internet Explorer ya era un abuso que hubiese llenado de líneas un ejemplo que era para otra cosa; y sin embargo tuve que meter un hack para Opera.

¡ME ... DRITE EN EL OJO DE ODÍN! ¡¿Cómo puede ser que hagan un tremendo navegador y se les pase el detalle de que no reconoce valores de porcentaje en las esquinas redondas?!
En fin, la próxima versión seguro lo arreglan(*), pero mientras tanto dejo un "truco" para zafar más o menos dignamente.

Aquí va el ejemplo

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>
   Documento sin título
  </title>
  <style type="text/css">
/*<![CDATA[*/
#mostrar {
  visibility: hidden; /*POR BUG IE6*/
  position: absolute;
  left: 480px;
  top: 146px;
  width: 210px;
  height: auto;
  background-color: #0CF;
  padding: 10px;
  border-radius: 10px;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=0)";
  opacity: 0;
  }

.zoomin {
  width: 20px;
  height: 20px;
  border: thin;
  border-width: 1px;
  border-radius: 5%;
  cursor: -moz-zoom-in;
  cursor: -webkit-zoom-in;
  }
.zoomout {
  border: thin;
  border-width: 1px;
  cursor: pointer;
  cursor: -moz-zoom-out;
  cursor: -webkit-zoom-out;
  border-radius: 25px; /*HACK PARA OPERA*/
  }

  /*]]>*/
  </style>

  <script type="text/javascript">
//<![CDATA[
var tamanoW = 20;
var tamanoH = 20;
var alfa = 0;
var tiempo = 25;
var factorW = 456 / tiempo;
var factorH = 473 / tiempo;
var frena;

  function agrandar(){
   if (tamanoW < 456){
   tamanoW += factorW;
   tamanoH += factorH;
   document.getElementById('imagen').style.width = tamanoW +'px';
   document.getElementById('imagen').style.height = tamanoH +'px';
 
   frena = setTimeout(agrandar, tiempo);
   }

   else {
   clearTimeout(frena);
   document.getElementById('imagen').className = 'zoomout';
   tamanoW = 456;
   tamanoH = 473;
   document.getElementById('imagen').style.width = '456px';
   document.getElementById('imagen').style.height = '473px';
   document.getElementById('mostrar').style.visibility = 'visible';  /*POR BUG IE6*/
 
   frena = setTimeout(mostrar, 1);
   }
  }

  function volver() {
   if (tamanoW > 20){
   alfa -= 0.1;
   tamanoW -= factorW
   tamanoH -= factorH
   document.getElementById('imagen').style.width = tamanoW +'px';
   document.getElementById('imagen').style.height = tamanoH +'px';
   document.getElementById('mostrar').style.opacity = alfa;
   document.getElementById('mostrar').style.filter =
'progid:DXImageTransform.Microsoft.Alpha(opacity=' +parseInt(alfa*100)+ ')' 
 
   frena = setTimeout(volver, tiempo);
   }

   else {
   clearTimeout(frena);
   tamanoW = 20;
   tamanoH = 20;
   alfa = 0;
   document.getElementById('imagen').className = 'zoomin';
   document.getElementById('imagen').style.width = '20px';
   document.getElementById('imagen').style.height = '20px';
   document.getElementById('mostrar').style.opacity = '0';
   document.getElementById('mostrar').style.filter =
'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'
   }
  }


  function mostrar() {
   if (alfa < 1){
   alfa += 0.01;
   document.getElementById('mostrar').style.opacity = alfa;
   document.getElementById('mostrar').style.filter =
'progid:DXImageTransform.Microsoft.Alpha(opacity=' +parseInt(alfa*100)+ ')' 

   frena = setTimeout(mostrar, 25);
   }

   else {
   clearTimeout(frena);
   alfa = 1;
   document.getElementById('mostrar').style.opacity = '1';
   document.getElementById('mostrar').style.filter.Alpha = '(opacity=100)';
   }
  }

  //]]>
  </script>
 </head>
 <body>
  <img class="zoomin" src="http://javascriptcsspr.comli.com/css/images2/combate_gatuno.jpg" id="imagen" onmouseover="agrandar()" onclick="volver();" alt="Gatos" /> <div 
id="mostrar">Pulse en la imagen para volver a su estado anterior.</div>
 </body>
</html>
Bien. Después de terminarlo me quedé pensando en eso que cité al comienzo del post. Y teniendo en cuenta que todas estas animaciones en CSS están hechas con JS, me pareció poco coherente que en verdad no existiera un "evento" para saber cuándo empieza y/o termina una transición.
Y resulta que existe, pero como aún no es estándar, cada navegador lo pone como se le viene en gana, por eso no hay uno compatible y que se pueda usar como atributo en el HTML.

Aquí va el otro ejemplo.

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>
   Documento sin título
  </title>
  <style type="text/css">
/*<![CDATA[*/
#imag {
  width: 20px;
  height: 20px;
  border: thin;
  border-width: 1px;
  border-radius: 0;
  -webkit-transition: border-radius 1.1s linear, height 1.1s linear, width 1.1s linear;
  -moz-transition: border-radius 1.1s linear, height 1.1s linear, width 1.1s linear;
  -o-transition: border-radius 1.1s linear, height 1.1s linear, width 1.1s linear;
  }

#imag:hover {
  border-radius: 20px;
  width: 456px;
  height: 473px;
  }

#aviso {
  position: absolute;
  left: 480px;
  top: 146px;
  width: 210px;
  height: auto;
  background-color: #0CF;
  padding: 10px;
  border-radius: 10px;
  }

.transparente {
  -webkit-transition: opacity .5s linear; 
  -moz-transition: opacity .5s linear; 
  -o-transition: opacity .5s linear; 
  opacity: 0; 
  }

.opaco {
  -webkit-transition: opacity 1s linear; 
  -moz-transition: opacity 1s linear; 
  -o-transition: opacity 1s linear; 
  opacity: 1; 
  }

  /*]]>*/
  </style>

  <script type="text/javascript">
//<![CDATA[

var texto;

/* ESTA FUNCIÓN SÓLO CARGA LA VARIABLE texto CON EL OBJETO DE id=aviso 
Y MONITOREA EL EVENTO "FIN DE TRANSICIÓN" EN OBJETO CON id=imag .
CUANDO EL EVENTO SE DISPARA, EJECUTA FUNCIÓN mostrar1() .*/
function mostrar0() {
  texto = document.getElementById("aviso");

  var gatos = document.getElementById("imag");
  gatos.addEventListener("transitionend", mostrar1, true); // FF
  gatos.addEventListener("webkitTransitionEnd", mostrar1, true); // Saf Chr
  gatos.addEventListener("OTransitionEnd", mostrar1, true); // Op

/* AnimationEvent (para keyframes) y TransitionEvent son experimentales para IE10  */
}

/* ESTA FUNCIÓN ES PARA CAMBIAR LA CLASE EN OBJETO DE id=aviso .
LA ANIMACIÓN ESTÁ EN EL CSS DE CADA UNA DE LAS DOS LAS CLASES. */
function mostrar1() {
  if(texto.className == "transparente") setTimeout('texto.className = "opaco"', 20);
  else setTimeout('texto.className = "transparente"', 20); 
}
   
onload = mostrar0;
  //]]>
  </script>
 </head>
 <body>
<img id=imag src="http://javascriptcsspr.comli.com/css/images2/combate_gatuno.jpg" alt="Gatos" /> 
<div id=aviso class=transparente >Salga de la imagen para volver a su estado anterior.</div>
 </body>
</html>
Usé nada más que :hover, porque es para probar que funcionan, y que al llegar los gatos al tamaño máximo o mínimo de su animación CSS, se dispara una función que solamente cambia una clase en el cartelito. Porque la transición del fade también es CSS.


Redondeando: como me niego a sonarle los mocos a los demás, supongo que nadie viene a limpiar los míos.
Así que vengo yo solito, y me hago la corrección.


ayuda con marquee

como detectar que el scroll del navegador está en el top (o casi en el top) (algo más sobre animaciones)

Marquesina en todos los navegadores (algo más sobre marquee, como para que se note que 'todo' se puede adaptar, o simular con JS)



(*) En la versión 12.02 ya está arreglado.

Etiquetas: image, mostrar+div, ocultar+div, capas
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:18.