Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2010, 09h16   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 3
Points : 1
Points : 1
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 :
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 !
Nightswords est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 09h21   #2
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
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 116
Points : 2 142
Points : 2 142
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.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 09h44   #3
Membre éclairé
 
sébastien courjean
Inscription : novembre 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : sébastien courjean
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : novembre 2010
Messages : 204
Points : 319
Points : 319
Tu peux utiliser le deuxième argument callback de fadeIn :
Code :
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 :

scourjean est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 17/11/2010, 09h47   #4
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
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 116
Points : 2 142
Points : 2 142
Bien vu la petite solution récursive et terminale avec ça.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 09h48   #5
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 29 919
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 29 919
Points : 44 928
Points : 44 928
spa bien les id numériques, ni commençant pas du numérique !

mieux vaut
__________________
Ma page 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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 09h50   #6
Invité de passage
 
Inscription : novembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 3
Points : 1
Points : 1
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 :
1
2
3
$.each( "body", function(){
    $("p").fadeIn(1000);
});
Code :
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
Nightswords est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 09h55   #7
Invité de passage
 
Inscription : novembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 3
Points : 1
Points : 1
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 !
Nightswords est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 11h10   #8
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
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 116
Points : 2 142
Points : 2 142
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.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h32.


 
 
 
 
Partenaires

Hébergement Web