Foros del Web » Programando para Internet » Javascript »

esto es payta gente que le gusta programar en javascript un reto personal

Estas en el tema de esto es payta gente que le gusta programar en javascript un reto personal en el foro de Javascript en Foros del Web. este ejercicio este interesante no es solo un ejercicio de capas, sino juegas con el tiempo, ojala alguien pueda porque yo todavia no he podido ...
  #1 (permalink)  
Antiguo 27/10/2011, 19:55
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
esto es payta gente que le gusta programar en javascript un reto personal

este ejercicio este interesante no es solo un ejercicio de capas, sino juegas con el tiempo, ojala alguien pueda porque yo todavia no he podido

<!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>
<script language="Javascript">
var temporizadorplegar;
var temporizadordesplegar;
function recoger(){
clearTimeout(temporizadordesplegar);
var altura=parseInt(document.getElementById('contenido ').style.height); //quiten el espacio que da ya que lo da al copiar en contenido ('contenido')
if(altura>0)
{
altura--;
document.getElementById('contenido').style.height= altura+"px";
temporizadorplegar=setTimeout("recoger()",10);
}
else
{
clearTimeout(temporizadorplegar);
} }
function desplegar(){
clearTimeout(temporizadorplegar);

var altura=parseInt(document.getElementById('contenido ').style.height);//quiten el espacio que da ya que lo da al copiar en contenido ('contenido')
if(altura<305){
altura++;
document.getElementById('contenido').style.height= altura+"px";
temporizadordesplegar=setTimeout("desplegar()",10) ;
}
else
{
clearTimeout(temporizadordesplegar);
}
}

</script>
</head>
<body>
<div id="botones" style="width:600px; height:20px;">
<input type="button" id="recoger" value="recoger" onclick="recoger()" />
<input type="button" id="desplegar" value="desplegar" onclick="desplegar()" />
</div>

<div id="contenido" style="width:720px; height:305px; background-color:#006699; position:relative;"></div>
quiero que estos botones tambien puedan reutilizar la primera funcion pero no he podido, para hecer una funcion global
alguien sabe como
<br>
<input type="button" id="recoger" value="recoger" onclick="recoger()" />

<input type="button" id="desplegar" value="desplegar" onclick="desplegar()" />
<div id="contenido2" style="width:720px; height:305px; background-color: #CC0000; position:relative;"></div>


</body>

</html>
  #2 (permalink)  
Antiguo 28/10/2011, 15:29
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 7 meses
Puntos: 37
Exclamación Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

Hola jor_0203, como estás?

Mira el código que desarrollé para ayudarte con este tema:
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. <script language="Javascript">
  5. var temporizadorplegar;
  6. var temporizadordesplegar;
  7.  
  8. function detectar (evt) {
  9.     //evt, es una variable que se recibe implícitamente cuando se utiliza el modo
  10.     // no invasivo de manejar eventos, pero en este caso se llama la
  11.     // función detectar desde los botones, pasándole, el evento como tal
  12.    
  13.     var btnId = evt.target.id;
  14.     //Por medio del evento, y haciendo referencia a la fuente que lo generó (botón)
  15.     //utilizando la palabra reservada target, podemos saber el id
  16.    
  17.     switch (btnId) {
  18.         case "r1":      recoger("contenido");
  19.                     break;
  20.         case "d1":  desplegar("contenido");
  21.                     break;
  22.                    
  23.         case "r2":      recoger("contenido2");
  24.                     break;
  25.         case "d2":  desplegar("contenido2");
  26.                     break;
  27.     }
  28.     //Dependiendo del id, utilizamos un switch para llamar la función  específica
  29.     //pasándole el nombre del div que queremos animar
  30. }
  31.  
  32. function recoger(div){ 
  33.     clearTimeout(temporizadordesplegar);
  34.     var altura=parseInt(document.getElementById(div).style.height);
  35.    
  36.     if (altura>0) {
  37.         altura--;
  38.         document.getElementById(div).style.height= altura+"px";
  39.         temporizadorplegar=setTimeout(recoger,10, div);
  40.         //Esta es la sintaxis que reconocen firefox y google chrome, para pasar
  41.         //parámetros a una función llamada con setTimeOut.  No es obligatorio
  42.         //poner el nombre de la función entre paréntesis.  La variable div, es
  43.         //la que recibe el id del div que vamos a animar.
  44.     } else {
  45.         clearTimeout(temporizadorplegar);
  46.     }
  47. }
  48.  
  49. function desplegar(div){
  50.     clearTimeout(temporizadorplegar);
  51.     var altura=parseInt(document.getElementById(div).style.height);
  52.    
  53.     if (altura < 305){
  54.         altura++;
  55.         document.getElementById(div).style.height= altura+"px";
  56.         temporizadordesplegar=setTimeout(desplegar,10,div) ;
  57.     } else {
  58.         clearTimeout(temporizadordesplegar);
  59.     }
  60. }
  61.  
  62. </script>
  63. </head>
  64. <body>
  65. <input type="button" id="r1" value="Recoger" onclick="detectar(event)" />
  66. <input type="button" id="d1" value="Desplegar" onclick="detectar(event)" />
  67. <!-- Una regla de html es que los id no se pueden repetir, cada id es único como nuestro número de identificación.  Por eso le puse un id diferente a cada botón. Por otro lado, se llama la función detectar, pasándole como parámetro, el evento, explicado en el código javascript anterior.-->
  68.  
  69. <div id="contenido" style="width:720px; height:305px; background-color:#006699;"></div>
  70. quiero que estos botones tambien puedan reutilizar la primera funcion pero no he podido, para hecer una funcion global
  71. alguien sabe como
  72. <br>
  73. <input type="button" id="r2" value="Recoger" onclick="detectar(event)" />
  74. <input type="button" id="d2" value="Desplegar" onclick="detectar(event)" />
  75. <div id="contenido2" style="width:720px; height:305px; background-color: #CC0000;"></div>
  76.  
  77. </body>
  78. </html>

Debe haber un modo diferente de hacer esto, ya que el atributo style, es decir aplicar estilo inline, ya no es permitido, o por lo menos no es recomendable, por eso es necesario buscar el modo de no hacer esto.

Lo mismo con el evento onclick, es preferible asignar las funciones a los eventos por medio de manejadores semánticos, es decir, se quita el onclick de la etiqueta, si deja asi´:

Código HTML:
Ver original
  1. <input type="button" id="r1" value="Recoger" />

y desde javascript se le asignan los eventos así:

Código Javascript:
Ver original
  1. window.onload = function () {
  2.     document.getElementById("r1").onclick = detectar;
  3. }

De este modo queda más límpio el código html y se vé más profesional.

Espero entiendas cuales son las ventajas de esto y la de utilizar funciones como attachEvent o addEventListener.

Saludos
  #3 (permalink)  
Antiguo 28/10/2011, 15:41
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

Cita:
Iniciado por Raziel_Ravenheart Ver Mensaje
Debe haber un modo diferente de hacer esto, ya que el atributo style, es decir aplicar estilo inline, ya no es permitido, o por lo menos no es recomendable, por eso es necesario buscar el modo de no hacer esto.
interesante, puedes dejarnos alguna referencia acerca de ello??

Cita:
Iniciado por Raziel_Ravenheart Ver Mensaje
y desde javascript se le asignan los eventos así:

Código Javascript:
Ver original
  1. window.onload = function () {
  2.     document.getElementById("r1").onclick = detectar;
  3. }
te puede interesar esta lectura

jor_0203, los mensajes de visitas no son para que repitas lo que escribes en el foro
  #4 (permalink)  
Antiguo 28/10/2011, 17:44
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 7 meses
Puntos: 37
Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

Hola de nuevo Isabel y Jor?

Pues les cuento que hay un modo de acceder a los estilos aplicados a los elementos html, por medio de DOM Nivel 2, ya que si estos no están declarados directamente en la etiqueta (inline o intrusivo como me gusta decirle), y dependemos de estos valores para realizar alguna acción, no apareceran por medio del objeto style es decir

Código Javascript:
Ver original
  1. document.getElementById("algunID").style;

si el objeto no tiene ningún style inline, todos los atributos obtenidos por este medio, apareceran vacios. Para resolver este problema, aprendí que se puede utilizar un objeto DOM perteneciente a document llamado styleSheets, es decir se accede a este por medio de la siguiente sintaxis:

Código Javascript:
Ver original
  1. var estilos = document.styleSheets;

De esa manera la variable estilos guardará una lista de los objetos stylesheet explícitamente enlazados dentro o incrustados en el documento.

yo generalmente utilizo un for...in para observar todos los atributos y métodos(de cualquier elemento, incluso los elementos navegador, ventana, location, aunque con document, no funcionó :S), así:

Código Javascript:
Ver original
  1. var estilo = document.getElementById("algunID").style;
  2. var txt = "";
  3.  
  4. for(x in estilo) {
  5.   txt += x+": "+estilo[x]+"<br />";
  6. }
  7.  
  8. //suponiendo que lo siguiente es un div
  9.  
  10. document.getElementById("idDiv").innerHTML = txt;

Y así hago para conocer todos los atributos y métodos de algún objeto o elemento. Inténtenlo, verán muchas cosas que hasta les parecerán raras y otras interesantes, como por ejemplo url's completas, tipos de archivos y otras cosas. En el caso de styleSheets, pueden obtener la dirección completa de donde se encuentran los archivos css. Lo digo por que ya lo hice.

Otra cosa, no importa si utilizan link rel o @import, se pueden averiguar, pero tengan en cuenta, que @import es otra regla css y buscarlas una por una puede llegar a ser mucho trabajo. Pero de todos modos, este es el único modo de acceder a estilos css, declarados en el encabezado del documento o en un archivo externo, y conocer los valores si necesitamos trabajar con esta información:

Referencias:

En MDN
En javascript kit
En Mundo Geek

Que les aproveche
  #5 (permalink)  
Antiguo 28/10/2011, 18:29
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

Pido disculpas por no hacer un quote para cada frase que vaya a citar, pero es que si no no acabo Cito el post completo
Cita:
Iniciado por Raziel_Ravenheart Ver Mensaje
Hola de nuevo Isabel y Jor?

Pues les cuento que hay un modo de acceder a los estilos aplicados a los elementos html, por medio de DOM Nivel 2, ya que si estos no están declarados directamente en la etiqueta (inline o intrusivo como me gusta decirle), y dependemos de estos valores para realizar alguna acción, no apareceran por medio del objeto style es decir

Código Javascript:
Ver original
  1. document.getElementById("algunID").style;

si el objeto no tiene ningún style inline, todos los atributos obtenidos por este medio, apareceran vacios. Para resolver este problema, aprendí que se puede utilizar un objeto DOM perteneciente a document llamado styleSheets, es decir se accede a este por medio de la siguiente sintaxis:

Código Javascript:
Ver original
  1. var estilos = document.styleSheets;

De esa manera la variable estilos guardará una lista de los objetos stylesheet explícitamente enlazados dentro o incrustados en el documento.

yo generalmente utilizo un for...in para observar todos los atributos y métodos(de cualquier elemento, incluso los elementos navegador, ventana, location, aunque con document, no funcionó :S), así:

Código Javascript:
Ver original
  1. var estilo = document.getElementById("algunID").style;
  2. var txt = "";
  3.  
  4. for(x in estilo) {
  5.   txt += x+": "+estilo[x]+"<br />";
  6. }
  7.  
  8. //suponiendo que lo siguiente es un div
  9.  
  10. document.getElementById("idDiv").innerHTML = txt;

Y así hago para conocer todos los atributos y métodos de algún objeto o elemento. Inténtenlo, verán muchas cosas que hasta les parecerán raras y otras interesantes, como por ejemplo url's completas, tipos de archivos y otras cosas. En el caso de styleSheets, pueden obtener la dirección completa de donde se encuentran los archivos css. Lo digo por que ya lo hice.

Otra cosa, no importa si utilizan link rel o @import, se pueden averiguar, pero tengan en cuenta, que @import es otra regla css y buscarlas una por una puede llegar a ser mucho trabajo. Pero de todos modos, este es el único modo de acceder a estilos css, declarados en el encabezado del documento o en un archivo externo, y conocer los valores si necesitamos trabajar con esta información:

Referencias:

En MDN
En javascript kit
En Mundo Geek

Que les aproveche
Bueno, vamos por partes, como diría Jack el destripador.
Para empezar, sí, teóricamente es posible hacer eso como dices. Rescatar los valores de los estilos mediante los declarados en el CSS, sin embargo esto tiene 2 principales inconvenientes:
1.- No es ni mucho menos exacto, ni sencillo. Tienes que recorrer todas las hojas de estilo, y quedarte con el último valor para esa propiedad. Sin embargo, también puede aparecer un !important, e incluso más de uno, por lo que había que comprobar que no los hubiera, y si los hubiera ir guardándolos en una variable aparte para no pisarse con la variable "principal". Y para más INRI, debes usar sólo las reglas que afecten a ese elemento, así que tendrías que usar un selector CSS (como Sizzle) o document.querySelectorAll por cada regla, y después recorrer el NodeList que este devuelve en busca del elemento, lo que viene a ser una ineficiencia de libro.
2.- Supongo yo que será lento, porque hay que recorrer el DOM de la hoja de estilos, y pese a quien le pese el DOM no es un prodigio de la velocidad.

Lo del for ... in, es un bucle especial para recorrer objetos. Si lo que quieres es recorrer algún objeto en concreto y ver todas sus propiedades @caricatos nos facilitó la vida con su maravilloso Destripador.

Por último, la mejor solución a este problema es usar el estilo computado. Como siempre, IE y los que no son IE tienen implementaciones distintas, pero fáciles de conjugar con un if-else dentro de una función getStyle o similar. Lo único que hay que acordarse es que para IE, el computedStyle (o currentStyle según él) de la propiedad float es styleFloat.

Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #6 (permalink)  
Antiguo 28/10/2011, 22:12
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 7 meses
Puntos: 37
Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

Muchas gracias _Cronos, la vdd, me ahorró tiempo, total, eventualmente hubiera llegado a esa conclusión tarde o temprano (la vdd es que por ahora tengo css en lo básico), y no lo utilizo para mucho, por que mi contratante solo necesita funcionalidad, obvio lo utilizo para darle algo de orden a la página, pero como dije en otro post, la ventaja es que no tengo que preocuparme en ningún aspecto con css, javascript o cualquier otra cosa ya que llegamos a la conclusión de no darle soporte a IExplorer

Por otro lado, me gustaría saber que tienen que ver los important? Yo se para que son, pero que tienen que ver con document.styleSheets?. Espero que la respuesta no sea obvia

Y por lo del destripador, es que como ahora estoy empezando, me gusta experimentar con todo eso o ver lo que otros ya han visto, por que hasta ahora llevo como 3 meses estudiando frecuentemente javascript, pero como considero a caricatos un conocedor del tema, estaré más pendiente de su página...

Saludos
  #7 (permalink)  
Antiguo 29/10/2011, 08:04
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

Fíjate:
Código CSS:
Ver original
  1. .blue {
  2.  color:red !important;
  3. }
  4.  
  5. .blue {
  6.  color:blue;
  7. }
Si tú recorres las hojas de estilos en busca de la última declaración de esa propiedad, obtendrás blue. Sin embargo, la primera tiene un !important, y por lo tanto sólo será modificada por otro !important posterior. Lo que quiero decir es que tendrías que buscar "!important" en el string y si se encuentra, a partir de entonces usar sólo el último valor con !important.
No sé si me he explicado bien
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #8 (permalink)  
Antiguo 29/10/2011, 10:00
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 7 meses
Puntos: 37
Exclamación Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

Si claro entiendo, por que tiene prioridad la que dice important entonces tiene que modificarse esa, y al hacer la búsqueda secuencial solo queda guardada la última si no se tiene cuidado, en vez de modificarse la que tiene el important.

Entonces supongo que lo que primero fué document.styleSheets y viendo lo que sucedía con esta interfaz desarrollaron casi inmediatamente el computed style (current en virus explorer), leeré al respecto.

Gracias Chronos, por la respuesta.
  #9 (permalink)  
Antiguo 29/10/2011, 22:47
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

que interesantes aportes
aunque yo encontré la forma así
nota si saben otras formas me dicen


Código PHP:
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&iacute;tulo</title>
  6. <style type="text/css">
  7. <!--
  8. body {
  9. background-color: #FFCC99;
  10. }
  11. .contenedor{ width:700px; height:800px;}
  12. a{
  13.     background:#FFCC00;
  14.     border: medium solid #666666;
  15. }
  16. -->
  17. </style>
  18. <script type="text/javascript">
  19. var g, tt;
  20. var p=0,t;
  21. function mover(obj){
  22. if(p>350){
  23. clearTimeout(t);
  24. p=0;
  25. return;
  26. }
  27. p+=5;
  28. document.getElementById(obj).style.height=p+'px';
  29. document.getElementById(obj).style.width=p+'px';
  30. t=setTimeout( function(){ mover(obj) },30 ); }
  31.  
  32. function restar(obj){
  33.  g=parseInt(document.getElementById(obj).style.height);
  34.   document.getElementById("fg").innerHTML = g;
  35. if(g<=50){
  36. clearTimeout(tt);
  37. g=0;
  38. return;
  39. }
  40. g-=5;
  41. document.getElementById("fg").innerHTML =g;
  42. document.getElementById(obj).style.height=g+'px';
  43. document.getElementById(obj).style.width=g+'px';
  44. tt=setTimeout( function(){ restar(obj) },30 ); }
  45. </script>
  46. </head>
  47.     <body>
  48. <a onclick="mover('cuadros')">cuadro uno mosatar </a> &nbsp;<a onclick="restar('cuadros')">cuadros uno pregar</a>&nbsp; <a onclick="mover('cuadro')">cuadro dos</a>
  49.   &nbsp;<a onclick="restar('cuadro')">cuadro dos pregar</a>
  50.   <div class="contenedor" >    
  51. <div id="cuadros" style="width:355px; height:355px; background-color:#F00; position:absolute; text-align:center; line-height:50px; color:white; top: 36px; left: 12px;" onClick="mover('cuadros')">click</div>
  52.     <br />
  53.     <br />
  54.     <br />
  55. <div id="cuadro" style="width:355px; height:355px; background-color:#F00; position:absolute; text-align:center; line-height:50px; color:white; left: 367px; top: 36px;" >click</div>
  56.  </div>
  57.  <div id="fg"></div>  
  58.    
  59.     </body>
  60.     </html>
  #10 (permalink)  
Antiguo 30/10/2011, 02:31
 
Fecha de Ingreso: septiembre-2011
Mensajes: 158
Antigüedad: 12 años, 7 meses
Puntos: 15
Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

este post ya esta repetido :S

http://www.forosdelweb.com/f13/esta-funcion-debe-desplegararse-mas-rapido-depende-del-tiempo-pero-esta-muy-lenta-954240/
  #11 (permalink)  
Antiguo 30/10/2011, 08:05
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

entiendes que es harto complicado, por no decir que desanimas a ayudarte, si a cada post cambias de código??

si quieres otra alternativa, usa css3, con sus ventajas e inconvenientes

Etiquetas: funcion, gente, gusta, html, personal, reto, botones
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 13:31.