Partage
  • Partager sur Facebook
  • Partager sur Twitter

Stopper setInterval

Sujet résolu
    19 juillet 2013 à 13:49:02

    Bonjour à tous !

    Alors voilà, je suis en train de créer une galerie d'image. J'ai donc créé un système de lecture.

    Je m'intéresse maintenant à la pause. Mais là, j'ai un problème.

    Voici mon code :

    //fonction lecture
            var lirediapo = 0;
            lirediapo = setInterval(function (){
                $('.galerie-image-nav-right').trigger('click');
            },2000);
    
    //fonction stop
            $('galerie').mouseover(function () {
                    clearInterval(lirediapo);
            });

    La lecture marche bien, mais la pause non. La console ne m'indique pourtant aucune erreur.

    Pourriez-vous m'aider ?

    Merci !

    • Partager sur Facebook
    • Partager sur Twitter
      19 juillet 2013 à 13:53:42

      Bonjour,

      As-tu vérifié que l'instruction [clearInterval] est bien appellée au passage de la souris ?

      Tu pourrais par exemple afficher ( à l'aide d'un [console.log()] ou d'un [alert()] par exemple ) la valeur de la variable [lirediapo], tu ferais d'une pierre, deux coups :)

      -
      Edité par Matmusia 19 juillet 2013 à 13:55:52

      • Partager sur Facebook
      • Partager sur Twitter
        19 juillet 2013 à 14:11:47

        Je pense qu'il manque un '.' ou un '#' pour indiquer la classe ou l'id à ta ligne 8 juste avant galerie. :-)

        -
        Edité par Newyn 19 juillet 2013 à 14:12:19

        • Partager sur Facebook
        • Partager sur Twitter
          19 juillet 2013 à 14:20:01

          Bonjour !

          Merci pour vos réponses !

          J'ai donc essayé de mettre un alert !

          //fonction stop
                  $('.galerie').mouseover(function () {
                          clearInterval(lirediapo);
                          alert('test');
                  });

          Il manquait donc effectivement le . de la classe. Cependant, l'alert ne s'affiche pas lors du mouseover...

          • Partager sur Facebook
          • Partager sur Twitter
            19 juillet 2013 à 14:27:18

            Tu as une erreur dans la console d'affichée pour ton alert ?
            • Partager sur Facebook
            • Partager sur Twitter
              19 juillet 2013 à 14:40:33

              C'est un problème de ma fonction.

              Je viens d'essayer avec un alert et stop lors du mouseover sur le body ça ne marche pas.

              • Partager sur Facebook
              • Partager sur Twitter
                19 juillet 2013 à 14:51:07

                Met ton code si tu veux de l'aide :)
                • Partager sur Facebook
                • Partager sur Twitter
                  19 juillet 2013 à 14:59:06

                  Est-ce que le code en question est bien dans une fonction appellée lorsque le DOM est complétement chargé ?

                  Ca expliquerait pourquoi au moment de l'execution du code, le ciblage ne se fasse pas correctement.

                  Au cas où :

                  - Lien vers la documention Jquery -

                  -
                  Edité par Matmusia 19 juillet 2013 à 15:00:30

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 juillet 2013 à 14:59:29

                    hum... Je suis désolé j'ai trouvé la solution. C'était un id et non une classe... ( et heureusement parce que le code est assez long ).

                    Par contre, je bloque sur la fonction de reprise du diapo. J'essaye de faire un mouseout avec reprise de la fonction play mais ça ne marche pas.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 juillet 2013 à 15:24:51

                      Je me répète mais tu as fais ça comment ? Qu'on t'aide à corriger ...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 juillet 2013 à 15:31:16

                        Je pense que le bout de code important est uniquement celui-ci. Le reste de mon code est très très long.

                        J'ai donc mon code

                        //fonction lecture
                                var lirediapo = 0;
                                lirediapo = setInterval(function (){
                                    $('.galerie-image-nav-right').trigger('click');
                                },2000);
                         
                        //fonction stop
                                $('#galerie').mouseover(function () {
                                        clearInterval(lirediapo);
                                });

                        Je cherche maintenant un moyen de faire repartir le setInterval lorsque l'on enlève la souris.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 juillet 2013 à 15:39:07

                          Ton test de reprise de la lecture n'apparaît pas dans ton dernier bout de code, tu as dû l'oublier.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            19 juillet 2013 à 15:39:23

                            As-tu essayé avec mouseenter (pour la pause) et mouseleave (pour la reprise) plutôt ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              19 juillet 2013 à 15:45:33

                              Oups Désolé.

                              Oui :

                              //fonction lecture
                                      var lirediapo = 0;
                                      lirediapo = setInterval(function (){
                                          $('.galerie-image-nav-right').trigger('click');
                                      },2000);
                               
                              //fonction stop
                                      $('#galerie').mouseenter(function () {
                                              clearInterval(lirediapo);
                                      });
                              
                              //fonction reprise
                              
                                      $('#galerie').mouseleave(function () {
                                               lirediapo;
                                      });

                              Aucune erreur, et pourtant la diapo ne reprend pas lors du mouseleave...

                              • Partager sur Facebook
                              • Partager sur Twitter
                                19 juillet 2013 à 15:54:18

                                Il faut que tu redémarres le minuteur dans ton mouseleave avec:

                                lirediapo = setInterval(function (){
                                            $('.galerie-image-nav-right').trigger('click');
                                        },2000);
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  19 juillet 2013 à 15:57:36

                                  Parfait !!!

                                  Merci !

                                  J'avais essayé mais comme j'utilisais mouseout ça me superposé les deux lecture et me lisait trois ou quatres images par seconde !

                                  Je risque de recréer un autre topic si j'ai un autre problème, je suis en train de créer une galerie assez compliquée ! :p

                                  Merci beaucoup en tout cas ! Topic résolu !

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    19 juillet 2013 à 15:58:06

                                    Un exemple de code avec mouseover / mouseout : http://jsfiddle.net/6sJ2f/31/

                                    -
                                    Edité par Newyn 19 juillet 2013 à 16:00:44

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      19 juillet 2013 à 15:58:33

                                      Rien d'anormal à cela :)

                                      lirediapo est une variable. La fonction setInterval renvoie un entier qui ne sert que d'identifiant.

                                      Donc lorsque tu fais :

                                      var lirediapo = 0;
                                          lirediapo = setInterval(function ()
                                      { $('.galerie-image-nav-right').trigger('click'); },2000);


                                      la variable lirediapo prend comme valeur l'entier qui lui est retourné par la fonction setInterval()

                                      La ligne

                                      lirediapo;

                                      ne fait donc absolument rien ( de plus pour demander l'execution d'une fonction, son nom ne suffit pas, il faudrait le faire suivre de parenthèses pour que le moteur javascript comprène que tu souhaites qu'il execute la fonction en question ).

                                      Donc, en procédant comme tu le fais, la seule option est de créer un nouvel interval lorsque la souris quitte la zone de l'élément #galerie, en faisant appel à la même instruction que pour le premier.

                                      Tu pourrais donc envisager de mettre cette instruction dans une fonction qui serait appelé lors de l'initialisation de ton code, et lorsque la souris quitte l'élément #galerie.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        19 juillet 2013 à 16:02:02

                                        Ok ! Je vais le faire !

                                        Merci beaucoup !

                                        Ayant arrêté le javascript il y a plus d'un an, je patauge beaucoup ! :p

                                        Mais ça va revenir ! ;)

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          19 juillet 2013 à 16:07:32

                                          //fonction lecture
                                                  var lirediapo = 0;
                                                  function play() {
                                                      lirediapo = setInterval(function (){
                                                          $('.galleria-image-nav-right').trigger('click');
                                                      },2000);
                                                  };
                                          
                                          //lancement lecture
                                                  play();
                                          
                                          //fonction pause
                                                  $('#galleria').mouseenter(function () {
                                                          clearInterval(lirediapo);
                                                  });
                                          
                                          //fonction reprise
                                                  $('#galleria').mouseleave(function () {
                                                      play();
                                                  });

                                          Voici donc mon code final !
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Stopper setInterval

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown