2011-02-11 11 views
5

Actualmente tengo el siguiente código configurado para una diapositiva jQuery.¿Cómo elimino esta clase después de que la diapositiva de jquery esté en la posición hacia arriba?

$(document).ready(function() { 
    $('a#slide-up').click(function() { 
     $('.slide-container').slideUp(); 
     return false; 
    }); 
    $('a#slide-toggle').click(function() { 
     if ($('.slide-container').is(':visible')) { 
      $('.slide-container').slideUp(); 
      $(this).removeClass('active'); 
     } else { 
      $('.slide-container').slideDown(); 
      $(this).addClass('active'); 
     } 
    }); 
}); 

Y el html:

<a id="slide-toggle"></a> 

<div class="slide-container"> 
    <a id="slide-up"></a> 
    >>content<< 
</div> 

Cuando hago clic en # deslizable de palanca, la clase 'activa' se aplica en ella y div.slide-contenedor se desliza hacia abajo revelando el contenido y otro enlace para deslizar el contenedor hacia arriba (es decir, un # deslizante hacia arriba). Cuando hago clic en una # deslizadera hacia arriba, el contenedor se desliza hacia atrás pero una barra deslizadora # permanece "activa" con la clase aplicada.

Lo quiero para que cuando haga clic en un # deslizante, la clase 'activa' se elimine. ¿Cómo puedo hacer esto?

operación -Editar-

$(document).ready(function() { 
    $('a#slide-up').click(function() { 
     $('.slide-container').slideUp(function(){ 
      $('#slide-toggle').removeClass('active'); 
     }); 
     return false; 
    }); 

    $('a#slide-toggle').click(function() { 
     if ($('.slide-container').is(':visible')) { 
      $('.slide-container').slideUp(function() { 
      $(this).removeClass('active'); 
      } 
     }) 
     else { 
      $('.slide-container').slideDown(); 
      $(this).addClass('active'); 
     } 
    }); 
}); 

Respuesta

5

Basta con retirar la clase en el controlador para el botón #slide-up:

$('a#slide-up').click(function() { 
    $('.slide-container').slideUp(); 
    $('#slide-toggle').removeClass('active'); 
    return false; 
}); 

o si desea que se espera hasta que se complete la animación, hazlo en una devolución de llamada:

$('a#slide-up').click(function() { 
    $('.slide-container').slideUp(function(){ 
     $('#slide-toggle').removeClass('active'); 
    }); 
    return false; 
}); 

En cuanto a su comentario:

$('a#slide-toggle').click(function() { 
     // keep a reference to the slide-toggle element 
    var slideToggle = this; 
    if ($('.slide-container').is(':visible')) { 
     $('.slide-container').slideUp(function() { 
      $(slideToggle).removeClass('active'); // remove class from slide-toggle 
     }); // <-- moved the closing) to here 
    }  // <-- instead of here 
    else { 
     $('.slide-container').slideDown(); 
     $(slideToggle).addClass('active'); // add class to slide-toggle 
    } 
}); 
+0

Gracias. ¡El segundo era justo lo que necesitaba! ¿Hay alguna manera de hacer lo mismo (devolución de llamada) con un deslizador # to -gle? En este momento, cuando hago clic en él mientras la diapositiva está baja, elimina la clase de inmediato. Me gustaría esperar hasta que la animación haya terminado. – J82

+0

@John: Claro. Cualquier animación en jQuery puede aceptar una * devolución de llamada *, que es simplemente una función que se llama cuando la animación está completa. Así que haz clic en el código anterior y pasa una función al 'slideUp' o' slideDown', colocando tu código dentro de él. – user113716

+0

Gracias, Patrick. Probé con lo que sugeriste, pero creo que arruiné algo porque no funciona. ¿Puedes echarle un vistazo al código en la publicación editada y decirme dónde me salió mal? – J82

0

sólo tiene que añadir:

$(document).ready(function() { 
    $('a#slide-up').click(function() { 
     $('.slide-container').slideUp(); return false;}); 
    $('a#slide-toggle').click(function() { 

     // removing active class for active element 
     $('a.active').removeClass('active'); 

     if ($('.slide-container').is(':visible')) { 
      $('.slide-container').slideUp(); 
     } 
     else { 
      $('.slide-container').slideDown(); 
      $(this).addClass('active'); 
     } 
    }); 
}); 
Cuestiones relacionadas