2009-06-21 21 views
11

Me gustaría tener dos cosas a la vez cuando hago clic en un enlace. Estoy repasando lentamente la documentación de Jquery, pero todavía tengo que aprender lo que necesito.Jquery animar ocultar y mostrar

Aquí hay un enlace a mi site

Cuando hago clic en los servicios de enlace me gustaría que el div #slideshow para ocultar, y un nuevo div para reemplazarlo.

Había intentado que la presentación de diapositivas fuera animada al hacer clic en el enlace de servicios, pero ya sea que hiciera la función animada o vaya a la página html vinculada, no a ambas. ¿Cómo puedo lograr ambos?

No importa si simplemente oculto y muestro divs en la misma página, o si voy a una nueva página html. Solo quiero tener la función animada y cambiar el contenido mientras oculto uno.

El código jQuery estoy usando

$(document).ready(function(){ 
    $("a.home").toggle(
    function(){ 
     $("#slideshow").animate({ height: 'hide', opacity: 'hide' }, 'slow'); 
    }, 
    function(){ 
     $("#slideshow").animate({ height: 'show', opacity: 'show' }, 'slow'); 
    } 
); 
}); 

$(document).ready(function(){ 
    $("a.services").toggle(
    function(){ 
     $("#slideshow2").animate({ height: 'show', opacity: 'show' }, 'slow'); 
    }, 
    function(){ 
     $("#slideshow2").animate({ height: 'hide', opacity: 'hide' }, 'slow'); 
    } 
); 
}); 

el hogar y los servicios son los dos enlaces, y me gustaría servicios cuando se hace clic para ocultar el div #slideshow, y mostrar el div slideshow2, lo que sería oculto y luego reemplazar el primero.

hay una buena cantidad de html por lo que puede ser más fácil ver mi fuente desde el enlace.

Respuesta

11

Actualizado: Esta solución se actualizó después de una pregunta de seguimiento en los comentarios.

Debe utilizar callback method de los métodos show/hide.

$("a").click(function(){ 

    /* Hide First Div */ 
    $("#div1").hide("slow", function(){ 
    /* Replace First Div */ 
    $(this).replaceWith("<div>New Div!</div>"); 
    }); 

    /* Hide Second Div */ 
    $("#div2").hide("slow", function(){ 
    /* Replace Second Div */ 
    $(this).replaceWith("<div>New Div!</div>"); 
    }); 

    /* If you wanted to sequence these events, and only 
    hide/replace the second once the first has finished, 
    you would take the second hide/replace code-block 
    and run it within the callback method of the first 
    hide/replace codeblock. */ 

}); 

El método de devolución de llamada es el segundo parámetro de las funciones .show/.hide. Se ejecuta cada vez que se completa el método .show/.hide. Por lo tanto, puede cerrar/abrir su cuadro, y dentro del método de devolución de llamada ejecutar un evento inmediatamente después.

+0

Genial, eso funcionó. ¡Gracias! Solo una pregunta rápida, ¿cómo podría ocultar dos divs y reemplazarlos con dos divs en un solo clic. Técnicamente lo hago funcionar, pero reemplaza ambos divs con la misma cosa, por lo que se repite. Actualicé mi sitio con el problema actual. ¿Podría explicarme por qué, su código no funcionará sin el código anterior que estaba usando debajo de él? –

+0

La solución se ha actualizado para demostrar cómo puede ocultar dos divs y reemplazar ambos con diferentes divs. – Sampson

+0

Sí, ahora recuerdo que todo esto estaba cubierto en los tutoriales de la documentación de jquery, pero nunca entiendo nada hasta que realmente necesito usarlo. ¿Hay alguna manera de animar el .hide como slideup en vez de todo en la esquina superior izquierda –