Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problema con JavaScript

Estas en el tema de Problema con JavaScript en el foro de Frameworks JS en Foros del Web. Buenas a todos: Tengo un problema con un portfolio que estoy creando. Consiste en una division que contiene un head, y otra pequeña div donde ...
  #1 (permalink)  
Antiguo 21/06/2010, 02:51
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 7 meses
Puntos: 1
Problema con JavaScript

Buenas a todos:

Tengo un problema con un portfolio que estoy creando. Consiste en una division que contiene un head, y otra pequeña div donde viene la info sobre el trabajo. Para esto quiero emplear clases, de manera que con un solo estilo pueda hacer todos los muestrarios que quiera. Pero al aplicarle el efecto con jQuery, quiero dejar un tiempo de margen para que no se abra sola por un desplazamiento. Además, también evita así el antiestético error de que se abra y cierre una y otra vez. El problema es que utilizo una función a la que luego le aplico un setTimeout pero esto ya no me permite utilzar el this y entonces se abren todas las clases con el mismo nombre... Os pongo el código para que lo veais mas claro:

/* Estos son los estilos */

Código:
.div {
width:400px;height:300px;background:lightgrey;marg in:auto;
}
.bar {
width:400px;height:30px;overflow:hidden;
}
.head {
width:400px;height:30px;background:grey;float:left ;
}
.info {
width:400px;height:140px;background:#444444;float: left;color:white;
}



/* Y esto el condigo JavaScript */

function infoOpen() {
$(this).animate({height:170},'easein');
};
function infoClose() {
$(this).animate({height:30},'easeout');
};
$('.bar').hover( function() {
clearTimeout(infoClose);
setTimeout(infoOpen, 370);
},function() {
clearTimeout(infoOpen);
setTimeout(infoClose, 700);
}); <-- /* En este caso no me reconoce los this con respecto al .bar */



function infoOpen() {
$('.bar').animate({height:170},'easein');
};
function infoClose() {
$('.bar').animate({height:30},'easeout');
};
$('.bar').hover( function() {
clearTimeout(infoClose);
setTimeout(infoOpen, 370);
},function() {
clearTimeout(infoOpen);
setTimeout(infoClose, 700);
}); <-- /* Y en este abre todos los .bar a la vez... */

Bueno creo que el problema es muy sencillo, pero soy muy novato y no sé solucionarlo, si alguien con más experiencia pudiera echarme un cable le estaría muy agradecido.

Gracias y un saludo!
  #2 (permalink)  
Antiguo 21/06/2010, 08:06
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 9 meses
Puntos: 772
Hola Banditolane

Muevo tu tema al foro de Frameworks y Plugins Javascript desde Web general.

Saludos,
  #3 (permalink)  
Antiguo 21/06/2010, 15:11
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Problema con JavaScript

Pls necesito ayuda!!Nadie sabe como hacerlo??
  #4 (permalink)  
Antiguo 21/06/2010, 17:59
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Problema con JavaScript

Si podes usar el $(this)

Pasa que setTimeout es una funcion quisquillosa.

Probá:
Cita:
...
setTimeout("infoOpen($(this))", 370);

...

function infoOpen(seccion) {
/// a partir de aqui, tu objeto se llama "seccion"
...
Si no funciona, hacelo así:
Cita:
elemento = $(this);
setTimeout("infoOpen(elemento)", 370);
  #5 (permalink)  
Antiguo 22/06/2010, 02:26
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Problema con JavaScript

Buenas y gracias de antemano por la ayuda.

Sigue sin funcionarme. Te pongo el código que he utilizado:
Código:
var elemento = $(this);
		
		function infoOpen() {

			$(this).animate({height:170},'easein');

		};
		
		function infoClose() {

			$(this).animate({height:30},'easeout');

		};
				
		$('.bar').hover( function() {
			
			clearTimeout(close);
			open = setTimeout("infoOpen(elemento)", 370);
			
		},
		function() {
			
			clearTimeout(open);
			close = setTimeout("infoClose(elemento)", 700);
			
		});
Ya me temía que era algo muy simple, lo que pasa es que no controlo demasiado... No sé si tras tu ayuda lo que me falta es introducirlo en las funciones o que es lo que falla, pero por el momento no me funciona... He probado varias opciones como esta:

Código:
var elemento = $(this);
		
		function infoOpen(elemento) {

			elemento.animate({height:170},'easein');

		};
		
		function infoClose(elemento) {

			elemento.animate({height:30},'easeout');

		};
				
		$('.bar').hover( function() {
			
			clearTimeout(close);
			open = setTimeout("infoOpen(elemento)", 370);
			
		},
		function() {
			
			clearTimeout(open);
			close = setTimeout("infoClose(elemento)", 700);
			
		});
Bueno, espero tu respuesta a ver si lo podemos arreglar pronto. ¡Muchas gracias una vez más!

Un Saludo!
  #6 (permalink)  
Antiguo 22/06/2010, 07:59
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Problema con JavaScript

Lo unico que me parece extraño es que iguales la función a una variable. Para que? Si tu funcion no retorno nada.

Fijate que te dice el debugger.
  #7 (permalink)  
Antiguo 22/06/2010, 08:31
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Problema con JavaScript

Eso es xk sino no me funciona el clearTimeout... si lo hago simplemente con el nombre de la funcion no lo hace. Pero vamos, voy a darle mas vueltas con lo que me has dicho a ver si doy con la clave, aunque ya le he dao unas cuantas y no lo he lograo. Es que no se en que partes tengo que sustituir la variable "elemento" por el $(this). Please si se te ocurre algo más...

Gracias y Un Saludo!
  #8 (permalink)  
Antiguo 23/06/2010, 09:06
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Problema con JavaScript

En el codigo que pusiste mas arriba estas declarando la variable elemento afuera. Eso no tiene injerencia dentro de las demas funciones (me refiero al ambito de la variable, y mas cuando la declaras anteponiendo var). Tenes que declarar la variable dentro de un evento. Ej:
Cita:
$('.bar').hover( function() {
elemento = $(this);
clearTimeout(close);
setTimeout("infoOpen(elemento)", 370);

},
Lo que no me queda claro en donde declaras el evento. Dentro de document.ready? Deberías.
  #9 (permalink)  
Antiguo 24/06/2010, 10:48
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Problema con JavaScript

Que va tio, no hay manera. Pruebo todas las opciones que se. Teóricamente sería algo así no? Te pongo el codigo completo que utilizo:

Código:
<script type="text/javascript">

	$(document).ready( function() {
		
		function infoOpen(elemento) {
			
			elemento.animate({height:170},'easein');
			
		}
		
		function infoClose(elemento) {
			
			elemento.animate({height:40},'easeout');
			
		}

		$('.bar').hover( function() {
			
			elemento = $(this);
			clearTimeout(close);
			open = setTimeout("infoOpen(elemento)", 370);

		}, function() {
	
		    elemento = $(this);
			clearTimeout(open);
			close = setTimeout("infoClose(elemento)", 700);

		});

	});

</script>
Me han propuesto otra opción en otro foro que es con .stop(true) y .delay(370) pero no es lo mismo porque con el setTimeout si salgo y entro de nuevo dentro del tiempo no se cierra y se vuelve a abrir como ocurre con el .delay(), aunque soluciona uno de los 2 problemas que tengo... Please, veo que controlas bastante como para echarme un cable, te estaría muy agradecido si conseguimos solucionarlo con el setTimeout. Gracias una vez más por tu tiempo y atención.

Un Saludo!
  #10 (permalink)  
Antiguo 24/06/2010, 13:25
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 11 meses
Puntos: 65
Respuesta: Problema con JavaScript

La función setTimeout recibe 2 parámetro que es la función y el delay, además recibe como parámetros opcionales los parámetros para la función que se va a ejejcutar.

setTimeout(funcion, delay, param1, param2, ....)

Por ejemplo:

Código Javascript:
Ver original
  1. setTimeout(hola, 1000, "Hola","Dany");
  2.  
  3. function hola (saludo, nombre){
  4.     alert(saludo+" "+nombre);
  5. }

Entonces podés utilizar $(this) pasandolo como parámetro

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script>

$( function (){

    $('.bar').hover( function() {
        clearTimeout(infoClose);
        setTimeout(infoOpen, 370, $(this));
    },
    function() {
        clearTimeout(infoOpen);
        setTimeout(infoClose, 700, $(this));
    });


    function infoOpen(el) {
        $(el).animate({height:170},'easein');
    };

    function infoClose(el) {
        $(el).animate({height:30},'easeout');
    };

});
</script>
    <style>
        .bar{height:30px; width:250px; background:red; margin-bottom:10px }
    </style>
  </head>
<body>

    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>
    <div class="bar"></div>

</body>
</html> 
  #11 (permalink)  
Antiguo 25/06/2010, 05:23
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Problema con JavaScript

Vaaaale! A eso me refería. Tenía que ser tan simple como eso, pero no sé mucho del tema y no sabía como hacerlo. Muchas gracias jefe. ¡¡Tema resuelto!!

Gracias y Un Saludo!
  #12 (permalink)  
Antiguo 25/06/2010, 05:56
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 11 meses
Puntos: 65
Respuesta: Problema con JavaScript

yo tampoco, pero los IDEs traen documentación o referencia de las funciones asi que me fijo que parámetros aceptan jeje

Etiquetas: javascript
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 16:03.