SlideToggle : simplifiez vous la vie pour afficher et masquer un élément

Laisser une réponse »

Dans la série jQuery simplifie moi la vie, voici la méthode .slideToggle.

Voir la démo

Imaginez que vous avez un div monBloc que vous voulez masquer ou afficher en fonction du clic sur le lien displayBloc

<a id="displayBloc" href="#">Contenu masqué</a>
<div id="monBloc">Lorem Ipsum</div>

Plutôt que de s’amuser à appeler une fonction afficheMasque sur l’évènement onclick du lien pour un résultat sans animation comme ci-dessous :

function afficheMasque(){
     if(document.getElementById('monBloc').style.display=='none'){
        document.getElementById('monBloc').style.display='block';
    }else{
        document.getElementById('monBloc').style.display='none';
    }
}

Utilisez slideToggle pour obtenir la même chose avec une animation.

$(document).ready(function(){
    $("#displayBloc").click(function () {
        $("#monBloc").slideToggle("slow");
    });
});

La vitesse d’apparition/disparition du bloc est déterminée par ‘fast’ ou ‘slow’ ou être spécifié en millisecondes.

N’oubliez pas d’inclure l’appel à jQuery dans la balise HEAD.

<script src="http://code.jquery.com/jquery-latest.js"></script>

Pour aller plus loin, vous pouvez également utiliser toggleClass qui vous permet de permuter une classe (ajouter/retirer la classe à l’élément). Ainsi on peut afficher une flèche haut/bas (ou +/-) en fonction de l’affichage du contenu.
Pour cela il faut ajouter une classe au lien

<a id="displayBloc" class="deroule" href="#">Contenu masqué</a>
<div id="monBloc">Lorem Ipsum</div>
.deroule{
    display : block;
    width : 120px;
    background: url(fleches.gif) no-repeat right -50px;
}

.enroule {
    background: url(fleches.gif) no-repeat right 8px;
}

Ensuite on ajoute la méthode toggleClass qui va ajouter ou supprimer la classe enroule et donc dans l’exemple décaler l’image contenant les flèches

$(document).ready(function(){
    $("#displayBloc").click(function () {
        $("#monBloc").slideToggle("slow");
        $(this).toggleClass("enroule"); return false;
    });
});

Plus d’infos sur la documentation de jQuery



ShareThis

Publicité

6 commentaires

  1. Gillaume dit :

    Bonjour,
    Merci pour cet article fort sympatique, mais j’ai une question pour bien comprendre,
    - Comment faire pour que par défaut le div soit enroulé ?

  2. blog.yann dit :

    Bonjour,
    En fait, il suffit de dire qu’au chargement le contenu est caché, grâce la fonction hide(), comme ça, ensuite quand tu vas cliquer, l’ordre des événements seront inversés.
    Concrètement, avant la fonction click (juste après $(document).ready(function(){ ) , tu mets :

    $("#monBloc").hide();

    et le tour est joué ;)

  3. tiamat dit :

    Bonjour,

    Comment faire pour mettre un + qui se transforme en – plutôt que des flèches, je n’y arrive pas.

  4. HamzaCrow dit :

    salut ,voila mon probleme c’est quand le truc cacher sort y un button x fermer dedans mais il fonctionne pas merci de me renseigner et super tuto :D

  5. ass_am dit :

    Bonjour,
    Très pratique!
    Ma question est ceci:
    Comment faire pour mémoriser l’état de l’élément pour que celui-ci soit toujours affiché, s’il l’était, après rechargement de la page?
    Merci infiniment.

  6. nelson dit :

    bonsoir,

    je veux savoir comment faire pour que sa glisse

    du gauche a la droite(parce que par defaut c est de haut em bas)…

Laisser un commentaire