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 :

Faire des fadeIn() en boucle dans un for()


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Par défaut Faire des fadeIn() en boucle dans un for()
    Bonjour,

    Je cherche à réaliser la création successive de paragraphes qui s'affichent les uns après les autres avec l'effet fadeIn(). Voici le javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var id = 1;
     
    function Draw(){
     
    	for(i=1;i<=20;i++)
    	{
    		$("body").append("<p id='"+id+"' style='display:none;'>Hello</p>");
    		$("#"+id+"").fadeIn(1000);
    		id++;
     
    	}
    }
    Avec un sur la balise body pour lancer le script.

    Problèmes : Le navigateur affiche un fadeIn() de tous les paragraphes d'un coup, et non pas les uns après les autres.

    Quelqu'un aurait-il une idée pour m'aider ?

    Merci d'avance !

  2. #2
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    Certainement lié au fait que tu ne fais pas réellement le fadeIn durant la boucle. L'appel à la méthode ne fais que déclencher l'action, l'instruction suivante est déjà interprétée que ton fadeIn n'est pas terminé.
    Peut-être qu'avec un timer pour ralentir la boucle for() après l'instruction fadeIn() t'aiderait à avoir l'effet désiré.

    Si ce n'est pas ça, regarde du côté de la pile d'appels. Mais je n'y crois pas trop.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 207
    Par défaut
    Tu peux utiliser le deuxième argument callback de fadeIn :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function Draw(num)
    {
    	if (num<=20)
    	{
    		$("body").append("<p id='"+num+"' style='display:none;'>Hello</p>");
    		$("#"+num+"").fadeIn(1000, function() {
    			// Animation complete
    			Draw(num+1);
    		});
    	}
    }
    et appeler lors de onLoad :


  4. #4
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    Bien vu la petite solution récursive et terminale avec ça.

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    spa bien les id numériques, ni commençant pas du numérique !

    mieux vaut
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    spa bien les id numériques, ni commençant pas du numérique !

    mieux vaut
    D'autant plus qu'avec un sélecteur CSS, ça ne marchera pas. En tout cas, d'après mon expérience, un sélecteur CSS sur un id qui démarre par un numérique, ça marche pas des masses.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Par défaut
    Merci d'avoir répondu aussi vite.

    C'est exactement le problème auquel je pensais. Le fadeIn est juste déclenché mais le javascript passe directement à la suite du for sans traité le fadeIn. (Javascript n'est pas multitâche il me semble.)

    Ceci dit j'ai essayé aussi avec les méthodes suivantes :

    après le for():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $.each( "body", function(){
        $("p").fadeIn(1000);
    });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $("body").each(function(){
        $("p").fadeIn(1000);
    });
    Même effet. Là aussi l'exécution du code est trop rapide pour que l'affichage se fasse ?

    Je me penche sur un timer dans ma boucle for() pour essayer.

    Merci encore

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Par défaut
    Ca marche !!

    Merci scourjean ta solution est superbe !

    J'avais déjà pensé à utiliser le callback de fadeIn() mais je ne savait pas comment l'utiliser. J'avais essayer en mettant un return(); dans la fonction callback mais même effet que les autres solutions.

    Le fait de boucler en revenant à la fonction parent et faire la récurrence avec un if(), c'est parfait.

    Merci beaucoup pour votre aide, très rapide !

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

Discussions similaires

  1. [AC-2000] faire des regroupements avant affichage dans un formulaire
    Par Nashe dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/09/2009, 15h04
  2. [mySQL5] Faire une sorte de "boucle" dans une requête
    Par mdr_cedrick dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/07/2009, 17h40
  3. pour faire des zolis zécrans très "dans le vent"
    Par PaulR dans le forum Composants VCL
    Réponses: 10
    Dernier message: 05/09/2008, 21h25
  4. faire des colonnes de séparation dans un datagrid
    Par hokidoki dans le forum ASP.NET
    Réponses: 7
    Dernier message: 22/06/2007, 11h15
  5. [Débutant]Comment faire des tranches de nombre dans une tabl
    Par Jedecouvreaccess dans le forum Access
    Réponses: 7
    Dernier message: 05/09/2005, 08h46

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