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 :

Comment stopper un setInterval() ?


Sujet :

jQuery

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Points : 125
    Points
    125
    Par défaut Comment stopper un setInterval() ?
    Bonjour à tous,

    voici le mon code javascript :

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
        function change() {
            var current = ($('div.background img.show') ? $('div.background img.show') : $('div.background img:first'));
            if (current.length == 0) current = $('div.background img:first');
            var next = ((current.next().length) ? ((current.next().hasClass('show')) ? $('div.background img:first') : current.next()) : $('div.background img:first'));
            next.css({ opacity: 0.0 })
            .addClass('show')
            .animate({ opacity: 1.0 }, 1000);
            current.animate({ opacity: 0.0 }, 1000)
            .removeClass('show');
        };
     
        $(document).ready(function () {
     
            var timer = null, interval = 5000;
     
            $("#stop").click(function () {
                alert("testW");
                clearInterval(timer);
                timer = null
            })
     
            $("#start").click(function () {
                $('div.background img').css({ opacity: 0.0 });
                $('div.background img:first').css({ opacity: 1.0 });
                if (timer !== null) return;
                timer = setInterval(function () {
                    change();
                },
                interval);
            });
     
        });
     
    </script>

    comme vous pouvez le voir lorsque je clique sur le lien avec l'id start mon setinterval commence et lance la fonction change() qui change les images de mon background.
    Lorsque je clique sur le lien avec l'id stop le changement d'image s'arrete. Ça marche nikel !

    Seulement je veux que mon changement d'image ce fasse directement sans cliquer sur le lien avec l'id start

    donc je rajoute le code suivant :

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
        function thebackground( timer, interval) {
            $('div.background img').css({ opacity: 0.0 });
            $('div.background img:first').css({ opacity: 1.0 });
            if (timer !== null) return;
            timer = setInterval(function ()
            {
                change();
            },
            interval);
        }
     $(document).ready(function () {
              // code en haut
            thebackground(timer, interval);
            $('div.background').fadeIn(1000); // works for all the browsers other than IE
            $('div.background img').fadeIn(1000); // IE tweak
        });

    Maintenant quand je clique sur le lien avec l'id stop, ça continue ...
    Quelqu'un pourrait m'expliquer ce qui ne va pas ?

    Merci d'avance !

  2. #2
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    question de portée de la variable ...
    elle doit être globale .
    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 !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Points : 125
    Points
    125
    Par défaut
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var timer = null, interval = 5000;

    Après vérification, elles sont en globales. Je ne fais pas de var timer ou var interval à l'intérieur de mes fonctions

    EDIT : j'ai trouvé mon bonheur mais je ne comprend pourquoi ma première façon ne marchait pas ...

    au lieu de faire ça :
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     $(document).ready(function () {
              // code en haut
            thebackground(timer, interval);
            $('div.background').fadeIn(1000); // works for all the browsers other than IE
            $('div.background img').fadeIn(1000); // IE tweak
        });

    je fais :
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     $(document).ready(function () {
     
            $('div.background').fadeIn(1000); // works for all the browsers other than IE
            $('div.background img').fadeIn(1000); // IE tweak
        });

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <body onload="javascript:thebackground();"> ...</body>

    Du coup, quand je clique sur stop ça marche... Mais je ne comprend pas pourquoi le fais de déporter la fonction de $(document).ready
    à changé quelque chose...
    Est ce parce que mes variable devenait locale à $(document).ready ?
    Qu'aurait il fallu que je fasse pour que ma fonction marche dans ce que je faisais au début ?

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

Discussions similaires

  1. [C#] Comment stopper un evènement ?
    Par Bapt.ice dans le forum C#
    Réponses: 17
    Dernier message: 20/04/2006, 02h36
  2. [vbexcel]Comment stopper une macro sans la planter.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/11/2005, 14h45
  3. [Run]Comment stopper un prog sous Eclipse
    Par smag dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 31/07/2005, 00h48
  4. Réponses: 6
    Dernier message: 17/06/2005, 16h51
  5. Réponses: 17
    Dernier message: 19/10/2004, 09h05

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