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 :

Empêcher plusieurs événements


Sujet :

jQuery

  1. #1
    Invité
    Invité(e)
    Par défaut Empêcher plusieurs événements
    Bonjour,

    Je me tourne vers vous après plusieurs tentatives ratées :
    Comment empêcher une ou plusieurs actions/événements jQuery se produire lorsqu'un événement est déjà en cours d’exécution mais pas forcément sur le même élément ?

    Exemple,

    J'ai un menu déroulant qui sur l'événement .hover() se déroule. Si je le survole 3x, cet événement se produira 3 fois.

    Autre exemple,

    J'ai une liste d'albums photos, quand je clique sur un album il se produit une sorte d'animation vidéo mais si je clique en même temps sur un autre album ou sur deux (ou plus encore), et bien l'animation se produira autant de fois que j'ai cliqué sur d'albums.


    Cdt

  2. #2
    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

    N'oubliez pas qu'un ID doit être unique.

    On peut supprimer un événement avec la méthode off() : http://api.jquery.com/off/

    On peut avoir un événement qui ne se produira qu'une seule fois avec la méthode one() : http://api.jquery.com/one/.

    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.)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir danielhagnoul,

    Oui bien sûr tous mes identifiants sont uniques ; je ne pense pas qu'il y ait un soucis à ce niveau là.

    La fonction .one() ne correspond pas puisque l'événement doit se produire à chaque fois qu'on clique sur un l'élément, mais APRES l'animation vidéo.

    Alors quand il y a plusieurs éléments, elle se lance à chaque fois que je clique sans attendre que les autres aient terminé donc pour résumer, il devrait être impossible de lancer un événement similaire pendant cette animation vidéo.

    Il faut que j'explore la fonction .off() mais il ne me semble pas que je truove une réponse ici d'après ce que j'en ai vu.


    Merci

  4. #4
    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
    Sans les codes (CSS, HTML, JS) pour examiner le problème...

    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.)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bon disons que le site est loin d'être terminé donc je voulais éviter de mettre un lien tout de suite.
    Voilà un lien temporaire http://valef.fr/sites/spvconfrancon/content/photos.php pour visualiser le problème.

    Cliquez sur plusieurs albums avec quelques secondes de décalage. Vous voyez que l'animation (il n'y a pas encore l'animation vidéo) se répète autant de fois.

    Autre exemple : cliquez sur une photo plusieurs fois de suite rapidement, le "chargement" se répète à chaque fois.

    Bonne chance

  6. #6
    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

    C'est un problème d'animation. Vous devez utiliser la méthode finish() pour terminer immédiatement les animations précédentes.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $('#loadingPhotos').finish().fadeIn(600, function() {
     
                    $('#photosSelectorParent').removeClass('photosSelectorOpen');
                    $('#gallery > ul').empty().load('_photos_album1.inc.php', function() {        
                        $('#gallery > ul > li:gt(0)').hide(0);                    
                    });
     
                    $(this).finish().delay(1000).fadeOut(1200, function() {
                        $('#photosSelectorParent').addClass('photosSelectorOpen');
                        $nextTimeoutId = setTimeout(function() {launchGallerySlider($ClickedPhoto);}, 6000);                    
                    });
     
                });

    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.)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci pour cette réponse, j'ai vu une lueur d'espoir mais maintenant il n'y a carrément plus d'affichage du tout...

  8. #8
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    regarde du coté de stop()...
    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 !

  9. #9
    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
    Le problème c'est un jQuery obsolète ! Nous en sommes à la version : "http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js".

    La méthode stop() est obsolète.

    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.)

  10. #10
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    http://api.jquery.com/stop/

    Ils ne le disent pas
    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 !

  11. #11
    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
    Citation Envoyé par SpaceFrog Voir le message
    http://api.jquery.com/stop/

    Ils ne le disent pas
    C'est vrai !

    Mais je garde le souvenir de http://blog.jquery.com/2013/01/09/jq...-rc1-released/

    New! .finish() Method

    jQuery animations have gotten even better, and our API improved in the process. It all started with a suggestion to eliminate the Boolean trap posed by the .stop(Boolean, Boolean) signature. During that discussion it became clear that we didn’t have a way to handle one of the most useful cases: running all queued animations to their final value. So we added one, .finish(). The best way to show its benefits is with an example.

    As you can see from the example, most uses of the .stop() API requiring Boolean arguments can be replaced with some combination of .stop() (with no arguments), .clearQueue() and/or .finish() and be less cryptic. We’re not removing the old behavior though, so any existing code should work fine. We’d prefer that you use .finish() when appropriate, since it reads better and avoids confusing Boolean parameters. And, when you need to go to the end of a whole series of animations, .finish() will do that in 1.9 when nothing would before.

    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.)

  12. #12
    Invité
    Invité(e)
    Par défaut
    Merci de vos conseils, cependant en essayant le .stop() cela coupe mon animation au milieu de son déroulement. Ce qui fiche en l'air toute l'interface de l'utilisateur...

    danielhagnoul c'est de moi dont il est question je suppose, mais cela est-il grave ?
    Le problème c'est un jQuery obsolète ! Nous en sommes à la version : "http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js".

    J'ai changé par la nouvelle version.

  13. #13
    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
    Bien oui ! Je vois un : <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>.

    Avec la dernière version de jQuery, la méthode finish() fera son boulot.

    Voir le code exemple du message n° 6.

    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.)

  14. #14
    Invité
    Invité(e)
    Par défaut
    ça a l'air de fonctionner !
    Qu'en pensez-vous d'un point de vue extérieur ?

    Merci à vous

    Comment puis-je être sûr si j'ai utilisé la "bonne façon" de procéder face à ce problème ?

  15. #15
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    .stop accepte 2 paramètres ...
    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 !

  16. #16
    Invité
    Invité(e)
    Par défaut
    Et bien non en fin de compte cela ne fonctionne toujours pas

    Si j'utilise le .finish() l'effet visuel est bien, sauf que les diapos de tous albums défilent d'un coup...

  17. #17
    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
    Je vous suggère de regarder la démonstration en fin de http://api.jquery.com/finish/ et de tester les différentes possibilités.

    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.)

  18. #18
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Désolé de ce retard, beaucoup de travail.

    En effet, j'ai lu précisément la documentation et je comprends mieux le fonctionnement, il fallait que je rajoute le .clearQueue() avant le .finish().

    L'animation semble plutôt réussie.


    Merci de votre aide.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/08/2009, 07h36
  2. Attendre plusieurs événements
    Par Bastango dans le forum ActionScript 3
    Réponses: 5
    Dernier message: 20/06/2009, 13h26
  3. Plusieurs évènements javascript pour une même action
    Par niacinside dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/06/2008, 14h56
  4. [AWT] Gestion de plusieurs évènements
    Par Nadd dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 05/12/2007, 12h35
  5. [MySQL] UNE date pour plusieurs dates et UN évènement pour plusieurs évènements...
    Par Aliosha dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 19/03/2007, 21h58

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