IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Fonction .queue() pour animer deux éléments différents


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Par défaut Fonction .queue() pour animer deux éléments différents
    Bonjour,

    j'essaie d'appliquer deux animations FadeOut et FadeIn sur des paragraphes contenus dans une div.

    La difficulté vient du fait que l'animation ne porte pas sur les mêmes éléments. Je souhaiterais que lorsque l'image est cliquée, tous les paragraphes contenus dans la div disparaissent, puis qu'un paragraphe spécifique soit affiché. Du coup il réalise les deux animations en même temps, et je voudrais qu'elle soit l'une après l'autre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    jQuery(document).ready(function () {  
    $("img#image-1").click(function(){ 
            $("div#contenu p").fadeOut(3000).queue( function()
                  {
            $("p#paragraphe-fadein").fadeIn(3000);
            $(this).dequeue();
                   });
                   })  })
    Merci d'avance !

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Par défaut
    J'ai vu sur le site officiel de Jquery que la méthode .FadeIn pouvait recevoir une fonction exécutée à la fin de l'animation, en deuxième argument :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    jQuery(document).ready(function () {  
        $("img#image-2").click(function() {
            $("div#contenu p").fadeOut(3000, function() {
                $("p#paragraphe-fadein").fadeIn(3000);
            });
        });  
    });
    Néanmoins ça ne fonctionne pas non plus. Je n'ai plus aucune réaction quand je clique sur mon image, je ne vois vraiment pas où j'ai pu faire une erreur...

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $( "#image-2" ).on( "click", function(){
        $( "#contenu p").fadeOut( 3000, function(){
            $( "#paragraphe-fadein" ).fadeIn( 3000 );
        });
    });
    Le code ci-dessus est correct sous réserve que les sélecteurs existent et correspondent à ce qui est souhaité. Impossible de le savoir et de tester sans le contexte (CSS, HTML).

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Par défaut
    Bonjour,

    merci pour ta réponse ! le code que tu m'as donné fonctionne bien, mais il y a juste un fonctionnement un peu bizarre : j'ai un paragraphe qui est affiché par défaut dans ma div "contenu". Lorsque je clique une première fois sur mon "image-2", la disparition du paragraphe initial et l'affichage du deuxième paragraphe se font simultanément. L'effet désiré (d'abord le FadeOut, puis le FadeIn, l'un après l'autre) n'est obtenu que lors des clics suivants sur l'image. (disparition et apparition l'une après l'autre du paragraphe "paragraphe-fadein").

    Ci-dessous une copie du code HTML + Script pour y voir plus clair... Merci d'avance pour votre aide !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <img id="image-2" style="vertical-align: middle;" alt="" src="http://www.siteweb.fr/image-2.jpg" /></a>
     
    <script type="text/javascript">
    jQuery( "#image-2" ).on( "click", function(){
        $( "#contenu p").fadeOut( 3000, function(){
            $( "#paragraphe-fadein" ).fadeIn( 3000 );
        });
    });  
    </script>
     
    <div id="contenu" style="border: 1px solid;">
    <p id="texte-depart">Cliquez sur l'image "Image-2" pour faire apparaître le texte !</p>
    <p id="paragraphe-fadein" style="display: none;">Apparition du texte FadeIn</p>

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Pour le choix de l'animation, c'est la vôtre, j'ai juste repris votre code du message numéro 1.

    À la lecture de vos commentaires et avec la possibilité de tester, il me semble que ce que vous recherchez c'est plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $( function(){
     
    	$( "#image-2" ).on( "click", function(){
    	    $( "#contenu p" ).hide();
    	    $( "#paragraphe-fadein" ).fadeIn( 2000 );
    	});  
     
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Par défaut
    Bonjour,

    Merci pour votre réponse ! Effectivement l'utilisation de .hide() règle le problème car la méthode est "instantanée" du coup plus de problème d'animations simultanées ou non .

    J'aurais préféré utiliser la méthode FadeOut pour faire disparaître le contenu initial pour des raisons esthétiques... Ce qui est bizarre c'est qu'un paragraphe, qui était en mode "display:none" et sur lequel on a appliqué le fadeIn(), lorsqu'on reclique sur l'image la "non-simultanéité" / l'ordre voulu / fadeOut() puis fadeIn() est bien respecté.

    Je me demande quelle peut être la propriété (CSS peut-être) qui résulte de l'application de la méthode FadeIn (j'ai tenté de rajouter "display: block;" et "opacity: 1") qui fait que lorsqu'on réitère l'action la deuxième fois, cela fonctionne...

    Ou alors une autre syntaxe plus explicite / plus contraignante que la fonction de callback de la méthode pour vraiment forcer les deux animations à s'éxécuter de manière successive... ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/09/2013, 11h59
  2. Réponses: 4
    Dernier message: 06/09/2012, 16h14
  3. Réponses: 8
    Dernier message: 30/01/2008, 23h25
  4. [Requête] Tri d'éléments en fonction de deux heures différentes
    Par Grandchon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/05/2007, 18h45
  5. Réponses: 8
    Dernier message: 01/12/2006, 09h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo