Ayuda con efecto JQuery

Buenas tardes-noches, no se si debería ir esta consulta aquí, pero allá va...

Estoy realizando una "especie" de slider tipo acordeón utilizando JQuery, que casualmente es muy parecido a este: http://codecanyon.net/item/classic-accordion/full_screen_preview/140404

El caso es que he conseguido que las imágenes que se encuentran a los lados izquierdo y derecho se ensanchen hacia la derecha o hacia la izquierda hasta lograr su tamaño original pero quiero incluir una imagen central que se ensanche hacia ambos lados, y como no llevo demasiado tiempo con JQuery no encuentro la manera de hacerlo correctamente... y estoy cansado de probar cosas. Alguien me sugiere alguna idea de que propiedades utilizar para el método animate?(que es con el que he realizado el efecto de las imágenes que ya tengo acabadas...)

Un saludo
metalgear escribió:mira esto:
http://www.armagost.com/zaccordion/#download


Gracias, pero eso es un plugin para JQuery... estoy haciendo yo un código a mano para una pág.web y no quiero utilizar ningún plugin que me de el trabajo ya "hecho", quiero aprender a hacerlo yo mismo, pero no veo la manera de ensanchar la imagen sin que se ejecuten las ordenes de JQuery de manera secuencial(es decir, que primero se ensanche hacia una dirección y luego hacia la otra, en lugar de hacerlo a la vez)
Es cuestión de jugar con la posición del div y su heigth para dar la sensación de que se ensancha por los dos lados. No se como tendrás la imagen si en background o con una etiqueta img, pero dependiendo puedes jugar o con la capa o con la etiqueta, modificando también con CSS mientras juegas con el jQuery.

Es que claro, sin código a mano, no puedo orientarte sobre como podrias montarlo, todo depende de la estructura que hayas usado para montar la parte html y el CSS.
Lugal escribió:Es cuestión de jugar con la posición del div y su heigth para dar la sensación de que se ensancha por los dos lados. No se como tendrás la imagen si en background o con una etiqueta img, pero dependiendo puedes jugar o con la capa o con la etiqueta, modificando también con CSS mientras juegas con el jQuery.

Es que claro, sin código a mano, no puedo orientarte sobre como podrias montarlo, todo depende de la estructura que hayas usado para montar la parte html y el CSS.


Ahora mismo no tengo el código a mano, pero básicamente, tengo 3 imágenes(con etiqueta img) con su ancho reducido(pero no su alto) posicionadas de manera absoluta dentro de una capa tomando como referencia el tamaño de la pantalla del navegador y el tamaño de la capa para colocar una de ellas en el extremo izquierdo de la capa, otra en el centro y otra en el extremo derecho.

Con JQuery utilizo el manejador de eventos onmouseover y onmouseout (aunque estoy planteándome utilizar el manejador hover, que tiene función de entrada y salida) para darles un valor de ancho para que se ensanchen con el método animate() hasta llegar a ese valor y dependiendo de en que extremo este la imagen juego con la propiedad margin-left para conseguir un efecto de ensanchamiento por la parte derecha de la imagen o por la parte izquierda. El problema me viene al querer hacer lo mismo con la imagen central, que si juego con los valores de margin-left, el efecto no lo hace todo de una, se ejecuta de manera secuencial(primero se ensancha del todo y luego se aplica el margin-left) y he probado con las propiedas left y right del método css y ocurre lo mismo...por eso no tengo ni idea de con que conseguir ese efecto de "ensanchamiento" por ambos lados de la imagen [+risas]
Entonces porque no intentas generar una capa por cada imagen y las ordenas por z-index, sitúas la imagen en la capa como background y la fijas al fondo, así solo tendrás que jugar con el div y z-index, ahorrandote tener que sincronizar, no se si me he explicado.
Lugal escribió:Entonces porque no intentas generar una capa por cada imagen y las ordenas por z-index, sitúas la imagen en la capa como background y la fijas al fondo, así solo tendrás que jugar con el div y z-index, ahorrandote tener que sincronizar, no se si me he explicado.


Si no te entiendo mal, me dices que ponga en mi capa 3 capas que contengan como background-image una imagen y luego agrandar o encoger estas capas para mostrar o esconder su imagen de fondo, jugando con el z-index para mostrar unas imágenes por encima de otras. Para hacer eso debería poner las 3 capas en el mismo lugar, para que las imágenes de fondo estén superpuestas, me imagino. Pero esto creo que me hará otro tipo de efecto, que es una especie de carrousel de imágenes y lo que yo intento hacer es conseguir un slider con efecto de "ensanchamiento" de las imágenes.

Leyendo tu comentario se me ha ocurrido una manera alternativa de hacerlo como pretendo, si me sale como creo que debería salir, postearé los resultados, muchas gracias ;)

PD: como dije ayer, ahora mismo no dipongo de mi código, pero lo que tengo es algo parecido a esto:

<html>
<head>
<title></title>
<style>
#img1 {width:130px;}
#img2 {width:130px;}
#img3 {width:130px;}
</style>
<script>
function poscionamiento() {
//Aquí doy los valores css position de manera absoluta a las imágenes y las posiciono dentro de la capa//

/*Inicializo JQuery con document ready y utilizo el evento mouseover con el método animate() para declarar que a la imagen sobre la que se genera el evento, tenga un zIndex mayor que las otras imágenes y un width de 400px(el tamaño max. de la imagen) y un marginLeft con valor positivo(si quiero que la imagen se vaya agrandando por la derecha hasta alcanzar su tamaño) o con valor negativo(si quiero que la imagen se vaya agrandando por la izquierda hasta alcanzar su tamaño)

Luego utilizo el evento mouseout para hacer que la imagen se enpequeñezca hasta alcanzar el tamaño original*/
}
</script>
</head>
<body onload="posicionamiento()">
<div id="contenedor">
//Esta capa contiene las imágenes que tienen un tamaño de 400*300 y se ven con un tamaño de 130*300(las imágenes se ven de manera similar a las del enlace efecto acordeón que puse en mi primer post)//
<img id="img1" src="imagen1.png"/>
<img id="img2" src="imagen2.png"/>
<img id="img3" src="imagen3.png"/>
</div>
</body>
</html>
Sólo comentar que el "$(document).ready" no es para inicializar jQuery, es un evento que espera a que el DOM esté cargado. Como la función posicionamiento() la estás ejecutando con un evento "onload" el "ready" queda sobrando, sólo necesitas uno de los dos.

Ojo la diferencia del evento "onload", y del "ready" de jQuery, es que el primero espera a que se cargue todo el contenido (incluyendo imágenes), mientras que el "ready" sólo espera que se cargue el HTML.

Por cierto, cuando intentas ensanchar la imagen a ambos lados a la vez, ¿al evento animate le estas pasando los datos en jSON, o estas usando dos animates?
dnL7up escribió:Sólo comentar que el "$(document).ready" no es para inicializar jQuery, es un evento que espera a que el DOM esté cargado. Como la función posicionamiento() la estás ejecutando con un evento "onload" el "ready" queda sobrando, sólo necesitas uno de los dos.

Ojo la diferencia del evento "onload", y del "ready" de jQuery, es que el primero espera a que se cargue todo el contenido (incluyendo imágenes), mientras que el "ready" sólo espera que se cargue el HTML.

Por cierto, cuando intentas ensanchar la imagen a ambos lados a la vez, ¿al evento animate le estas pasando los datos en jSON, o estas usando dos animates?


Gracias por lo del evento ready, como llevo poco tiempo con JQuery no tenía ni idea :)

Al método animate() de las dos imágenes que si me funcionan, le paso los datos de la siguiente manera: " $(imagen).animate({width:"400px"}) "(me imagino que con jSON te refieres al tipo de notación de "width:'400px'", no?) tanto en el evento mouseover como en el mouseout, el problema como ya he dicho lo tengo con la imagen central, pero a raíz de lo que me contestó Lugal, he pensado en dejar las dos imágenes de los laterales tal cual las tengo(con el ancho a 130 píxeles -siendo las imágenes de 400px de ancho-) y la imagen central dejarla con su tamaño original, pero con un z-index menor que las otras 2 para que se posicione por detrás y parezca que las 3 imagenes tienen un ancho de 130 píxeles. Una vez echo esto, para el evento mouseover de la imagen central solo tengo que hacer que se encojan las otras dos imágenes a la vez, para que de la sensación de que la central se "expande" tanto por la derecha como por la izquierda.

De todas maneras,esto último no lo he probado aún, así que no se si funcionará como pienso xD
Macari0 escribió:Gracias por lo del evento ready, como llevo poco tiempo con JQuery no tenía ni idea :)

Al método animate() de las dos imágenes que si me funcionan, le paso los datos de la siguiente manera: " $(imagen).animate({width:"400px"}) "(me imagino que con jSON te refieres al tipo de notación de "width:'400px'", no?)


Sí, me refiero a esa notación. Lo preguntaba por que habías mencionado que primero se ensanchaba y luego se aplicaba el margin-left, entonces con esa notación puedes indicarle ambas cambios en él mismo método.

Y bueno ya nos contarás que tal te va de la otra forma que vas a probar, si es que no va, trata de traerte el código para que sea más fácil. :p
dnL7up escribió:
Macari0 escribió:Gracias por lo del evento ready, como llevo poco tiempo con JQuery no tenía ni idea :)

Al método animate() de las dos imágenes que si me funcionan, le paso los datos de la siguiente manera: " $(imagen).animate({width:"400px"}) "(me imagino que con jSON te refieres al tipo de notación de "width:'400px'", no?)


Sí, me refiero a esa notación. Lo preguntaba por que habías mencionado que primero se ensanchaba y luego se aplicaba el margin-left, entonces con esa notación puedes indicarle ambas cambios en él mismo método.

Y bueno ya nos contarás que tal te va de la otra forma que vas a probar, si es que no va, trata de traerte el código para que sea más fácil. :p


Muchas gracias dnL7up, hoy mismo lo pruebo y posteo de nuevo aver que tal ha ido la prueba jajaj

EDIT: Muchísimas gracias a todos, ya he conseguido que me funcione como debería, modificando el código con lo que puse anteriormente! pero no se si es por paranoia o que, pero me da la sensación de que el efecto de movimiento de las imágenes no termina de ser igual al del slider que puse en el enlace xD
10 respuestas