cas d'utilisation javascript pour les distinctions de Magdales - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : cas d'utilisation javascript pour les distinctions de Magdales (/showthread.php?tid=4954) |
RE: Laideur du code Javascript - keke - 30-06-2010 Coucou, J'ai mis à jour mon script pour essayer d'afficher les éléments les uns à la suite des autres ... Mon but est dans une situation nominale donnée à savoir : 2 divs. le div 1 et le div 2. Div 1 donne des informations sur un joueur,Div 2 donne des informations sur le joueur suivant. Sachant cela, mon objectif est de : 1°/ faire disparaitre Div 1 doucement (fonction slideUp). 2°/ Comme Div 1 a disparu, on peut modifier le texte qui le compose. Il prend ainsi les valeurs de Div 2. 3°/ On désaffiche dans un temps très cours Div 2 et on affiche Div1 à la place (pratiquement invisible à l'oeil nu). 4°/ On modifie le texte de Div 2 pour prendre les informations sur le joueur suivant. 5°/ On affiche doucement le Div 2 pour se remettre dans la situation nominal (fonction fadeIn) Je me retrouve face à un comportement étrange à savoir : Au premier passage, la div 1 est aplatie normalement. Mais au deuxième passage, elle reste apparente. Puis au troisième passage, elle est applatie. au quatrième passage elle reste apparente. Ce qui est vraiment étrange, c'est que la fin de la boucle se termine par $("#premier_element").show() ; Qui devrait donc toujours afficher le premier div. Si vous aviez une idée de là ou réside mon erreur ? Et du pourquoi, une fois sur 2, mon code ne se comporte pas correctement. kéké PS : un bout de code : // permet d'éviter un appel systèmatique à AJAX' a été rajouté pour que l'AJAX ne soit solicité qu'une fois à chaque refresh de la page. Ce bout de code disparaitra par la suite ... PS : j'affiche aussi le bout de code pour y réfléchir demain à tête reposée ^^. La page de test n'a pas changée : http://www.magdales.com/test_jquery_et_json.php code côté client Code PHP :
RE: Laideur du code Javascript - Ter Rowan - 30-06-2010 n'utilisant pas jquery je ne peux pas tester mais t'es sûr que ce n'est pas simplement dû à tes différents timers ? je m explique : ta fonction se réalise toutes les 5000 au sein de ta fonction tu consommes des timers supérieurs à 5000 (enfin si j'ai bien compris les fonctions jquery qui ressemblent à ce que j'utilise) : $("#premier_element").slideUp(1000); $(document).delay(1000); $("#deuxieme_element").fadeIn(2000); $("#deuxieme_element").delay(2000); soit 6000 ==> Tu n as pas fini la première fonction que tu en démarres une seconde (ou pas), dans tous les cas probable effet de bord visuel maintenant, personnellement j'aurais créé autant de div que de distinction (a voir même pour en faire des <li> d'ailleurs si les effets sont possibles) et je les aurais afficher (avec ton aspect visuel) les uns après les autres. L'intérêt étant, en particulier avec la cible de Magdales, de pouvoir afficher toutes les données dans le cas des DV avec une bonne syntaxe (liste des distinctions) et de ne pas se prendre la tête avec le tour de passe passe entre 1 et 2 (mais bon si le nombre de distinction est important c'est pas mal aussi de ne garder que deux div pour éviter une multiplication d'éléments dynamiques dans le dom) RE: Laideur du code Javascript - keke - 30-06-2010 Coucou Ter Rowan, J'ai ré-essayé en réduisant les temps : $("#premier_element").slideUp(1000); $(document).delay(1000); $("#deuxieme_element").fadeIn(1000); $("#deuxieme_element").delay(1000); Mais le problème reste inchangé. J'avais par ailleurs mis les delay on imaginant que les effets ne se produisait pas séquentiellement. Ainsi, il me semble que javascript n'attend pas la fin du slideup pour lancer le delay. Concernant les <li> j'ai eu la même reflexion. mettre 200 éléments masqués n'est pas la meilleur solution car justement le DV devra les passer un à un pour lire la suite ce qui n'a pas d'intérêt je pense. Par ailleurs les DV n'ont pas forcément de soucis avec les affichages qui s'automodifie, si c'est correctement fait. Bon, merci pour la proposition. kéké RE: Laideur du code Javascript - Sephi-Chan - 30-06-2010 Ta solution réside plus dans l'utilisation des callbacks des effets. Exemple avec jQuery.slideToggle(). Dans le callback d'un masquage, tu affiches l'autres et tu remplaces le courant. J'enrichis si besoin à mon retour. Sephi-Chan RE: Laideur du code Javascript - keke - 30-06-2010 (30-06-2010, 10:07 AM)Sephi-Chan a écrit : J'enrichis si besoin à mon retour.Je veux bien. Je ne peux pas tester du boulot ... La fonction call back permet de lancer (si j'ai bien compris) une autre animation à la fin de la première. Le problème que je rencontre c'est que ces fonctions doivent se lancer à la fin de l'animation d'un autre élément. Je ne sais pas (au regard de la doc) si je peux le faire avec call back. Je testerais ce que j'en ai compris ce soir ^^. (c'est ma copine qui va me faire la gueule ...=) * keke a réussi à faire garder une de ses filles jusqu'à Vendredi soir ^^ Youpi ! RE: Laideur du code Javascript - atra27 - 30-06-2010 J'y pensait justemet, pourquoi ne pas faire apeller en callback les fonctions suivantes? Code : function prems() { C'est tapé a l'arrache, penser a mettre des noms de fonctions plus explicites... RE: Laideur du code Javascript - keke - 30-06-2010 Ca pourrait marcher ... Je vous dirais ça ce soir. Je viens de passer la matinée à lire un peu de documentation ... mais j'ai rien trouvé de plus probant que le bout de code que tu as mentionnés. Je vous tiendrais évidement au courant. Par contre, je trouve dommage qu'il n'y ai pas une option qui dise ne pas passer à la commande suivante tant que l'animation n'a pas fini. T'imagine si la programmation en général faisait pareil ? moi oui ^^, exemple ... : Je veux faire une addition puis une multiplication : $x = 3 $y = 4 $z = 0; $z = $x + $y $resultat = $z * 2 echo $resultat Et hop, au lieu du résultat attendu = 14, on afficherait $resultat = 0. Ben oui, car l'addition $x + $y a pris trop de temps, alors on est passé à la ligne suivant $resultat = 0 * 2. Ca serait vraiment désagréable ... Mais bon, passons. Je vous tiendras bien évidement au courant. kéké PS : je devrais peut-être scinder mon post ? RE: Laideur du code Javascript - atra27 - 30-06-2010 Peut étre qu'un découpage de sujet ferai pas de mal en effet car la on part plutot sur de la prog plutot qu'une réfléxion sur le language... Et ensuite bah le javascript est pas orienté pour faire du procédural il me semble... D'ou l'utilisation de nombreux callbacks dans les fonctions Jquery... RE: cas d'utilisation javascript pour les distinctions de Magdales - Ter Rowan - 30-06-2010 tu illustres très négativement ton affaire keke ^^ moi, je me dis plutôt que tu utilises des méthodes jquery qui peuvent, utilisées d'une certaine manière, te permettre de paralléliser peu ou prou différentes actions c'est un peu le principe de l'ajax, la page n'est pas figée même si le chargement n'est pas terminé (asynchrone quoi) $z=0; $z = appelAjax($x) + appelAjax($y); $z *= 2; alert($z); ouinnnn ça affiche 0 ... ou pas si tu rend ton code synchrone. RE: Laideur du code Javascript - Anthor - 30-06-2010 (30-06-2010, 11:22 AM)keke a écrit : Je viens de passer la matinée à lire un peu de documentation ... mais j'ai rien trouvé de plus probant que le bout de code que tu as mentionnés. Oui mais jQuery n'est pas Javascript ^^ Et PHP n'est pas vraiment prévu pour faire de l'événementiel. Par contre jQuery prend très bien en compte les queues d'animations, il faut juste utiliser la fonction animate au lieu d'utiliser les alias. EDIT: La queue est par défaut alias ou pas, voir : http://api.jquery.com/queue/ |