Basculer afficher / masquer sur le clic avec jQuery

J'ai un élément div, donc quand je clique dessus, un autre div qui est caché par défaut glisse et s'affiche, voici le code de l'animation elle-même:

$('#myelement').click(function(){
     $('#another-element').show("slide", { direction: "right" }, 1000);
});

Comment puis-je faire cela quand je clique sur le #myelement Une fois de plus (quand l'élément est déjà montré) il va Cacher le #another-element comme ceci:

$('#another-element').hide("slide", { direction: "right" }, 1000);?

Donc, fondamentalement, il devrait fonctionner exactement comme un slideToggle, mais le show/hide fonctions. Est-ce possible?

28
demandé sur Cyclone 2012-04-25 10:52:20

6 réponses

L'événement toggle est obsolète dans la version 1.8 et supprimé dans la version 1.9

essaie ça...

$('#myelement').toggle(
   function () {
      $('#another-element').show("slide", {
          direction: "right"
      }, 1000);
   },
   function () {
      $('#another-element').hide("slide", {
          direction: "right"
      }, 1000);
});

Remarque: Cette signature de méthode a été obsolète dans jQuery 1.8 et supprimée dans jQuery 1.9. jQuery fournit également une méthode d'animation nommée .toggle() qui permet de basculer la visibilité des éléments. Si l' animation ou la méthode événement est déclenché dépend de l'ensemble des arguments j'ai passé, docs jQuery .

Le .basculer() la méthode est fournie pour plus de commodité. Il est relativement simple à mettre en œuvre le même comportement à la main, et cela peut être nécessaire si les hypothèses .basculer() prouver limite. Exemple, .toggle() n'est pas garanti pour fonctionner correctement si elle est appliquée deux fois au même élément. Depuis .toggle() utilise en interne un clic gestionnaire pour faire son travail, nous devons dissocier Cliquez pour supprimer un comportement attaché avec .toggle (), de sorte que d'autres gestionnaires de clic peuvent être pris dans le crossfire. Le la mise en œuvre appelle également .preventDefault() sur le événement, donc les liens ne seront pas suivis et les boutons ne seront pas cliqués si .toggle () a été appelé sur l'élément, jQuery docs

Vous basculez entre la visibilité en utilisant afficher et masquer avec un clic. Vous pouvez mettre la condition sur la visibilité si l'élément est visible puis masquer sinon l'afficher. Notez que vous aurez besoin de jQuery UI pour utiliser plus d'effets avec afficher / cacher comme direction.

Vivre Démo

$( "#myelement" ).click(function() {     
    if($('#another-element:visible').length)
        $('#another-element').hide("slide", { direction: "right" }, 1000);
    else
        $('#another-element').show("slide", { direction: "right" }, 1000);        
});

Ou, utilisez simplement basculer au lieu de cliquer. En utilisant toggle, vous n'aurez pas besoin d'une instruction condition (if-else). comme suggéré par T. J. Crowder.

Démonstration En Direct

$( "#myelement" ).click(function() {     
   $('#another-element').toggle("slide", { direction: "right" }, 1000);
});
48
répondu Adil 2017-11-14 22:02:04

Utilisez la fonction jQuery toggle qui fait la tâche pour vous

.toggle () - affiche ou masque les éléments correspondants.

$('#myelement').click(function(){
      $('#another-element').toggle('slow');
  });
20
répondu Pranay Rana 2016-06-07 12:30:03

Vous pouvez utiliser ce code pour basculer votre élément var ele = jQuery ("yourelementid"); ele.slideToggle ('lent'); cela fonctionnera pour vous:)

0
répondu Abubakar Shams 2012-04-25 07:01:17

Cela fonctionnera pour u

   $("#button-name").click(function(){
        $('#toggle-id').slideToggle('slow');
    });
0
répondu CSS Guy 2014-12-04 08:04:42

Vous pouvez utiliser la fonction .toggle() au lieu de .click()....

0
répondu lakshmi priya 2017-09-08 07:29:43
$(document).ready( function(){
  $("button").click(function(){
    $("p").toggle(1000,'linear');
  });
});

Démo En Direct

-2
répondu Chaitanya Voleti 2015-02-18 12:02:51