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 :

Délai avant affectation booléenne ?


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Délai avant affectation booléenne ?
    Bonjour,

    Les fonction que nous définissons nous-même ne sont apparemment pas "arrêtables", j'ai donc pensé à mettre une valeur booléenne dans ma fonction et ne la lancer que si elle est à true.

    Je ne parviens cependant pas à affecter un délai avant l'affectation de cette valeur ; en effet j'ai essayé le setTimeout (avec une fonction qui ne fait rien), le delay et le callback. Rien n'y fait, la valeur est toujours affectée immédiatement ou pas du tout.

    Pouvez-vous m'éclairer sur le sujet svp ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 328
    Par défaut
    je n'ai pas trop compris ce que tu veux faire, si tu souhaite un délais avant de lancer une fonction, setTimeout est là pour ça, si tu veux mettre une condition à vérifier au lancement de la fonction, tu met une condition.

    Si tu veut un délais avant de paramétrer ce booléen (par exemple si ta fonction est appellée plusieurs fois), tu peux tuiliser setTimeout aussi.

    essayé le setTimeout (avec une fonction qui ne fait rien), le delay et le callback
    C'est flou, nous montrerais tu quelques lignes de code qu'on puisse t'aider un peu plus ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bien sûr, voilà le code :

    Sur un événement, je souhaite stopper la fonction suivante qui se lance dès le chargement de la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function launchGallerySlider() {
            var $presentGallerySlide = $('#gallery > ul > li:visible');
            var $nextGallerySlide = $('#gallery > ul > li:visible').next('li');
            if ($nextGallerySlide.length < 1) {
                $nextGallerySlide = $('#gallery > ul > li:first-of-type');
            }
            $presentGallerySlide.fadeOut();
            $nextGallerySlide.fadeIn();
            setTimeout('launchGallerySlider()', 6000);
    }
    Pour la redémarrer ensuite.
    Etant donné que cela n'est pas possible, j'utilise une valeur booléenne ($runGallerySlider) qui ne lance la fonction que s'il elle est à true.

    La fonction devient donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function launchGallerySlider($runGallerySlider) {
        if ($runGallerySlider) {
            var $presentGallerySlide = $('#gallery > ul > li:visible');
            var $nextGallerySlide = $('#gallery > ul > li:visible').next('li');
            if ($nextGallerySlide.length < 1) {
                $nextGallerySlide = $('#gallery > ul > li:first-of-type');
            }
            $presentGallerySlide.fadeOut();
            $nextGallerySlide.fadeIn();
            setTimeout(function(){launchGallerySlider($runGallerySlider);}, 6000);
        }
    }
    Le problème est que quand j'utilise :

    Code : 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
     
    $('#albums > div:nth-of-type(2) > div > figure').click(function() {
            $runGallerySlider = false;
            var $text = $(this).find('figcaption').text();        
            $(this).addClass('albumSelected');
            $('#loadingPhotos').fadeIn(600, function() {
                $('#gallery > ul').hide(0);
                $(this).delay(1000).fadeOut(1200, function() {
                    $('#gallery > ul').slideDown(600, function() {
                        $runGallerySlider = runTrueGallerySlider();
                    });
                });
            });
            $textToChange.slideUp(300, function() {
                $(this).addClass('albumSelected');
                $(this).empty().append($text).fadeIn();
            });
        });
    Avec la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function runTrueGallerySlider() {
        setTimeout(function(){return true;}, 6000);
    }
    Tout fonctionne, le slider s'arrête bien (étant donné le booléen à false) mais dans ce cas il ne redémarre pas.
    Et lorsque je fais en sorte de faire un callback en affectant la valeur sur l'évènement, la valeur true est affectée instantanément...

    Je veux soit parvenir à stopper la fonction pour la redémarrer manuellement, soit parvenir à faire un délai avant l'affectation du booléen à true.


  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
    Citation Envoyé par Croconino Voir le message
    Bonjour,

    Les fonction que nous définissons nous-même ne sont apparemment pas "arrêtables", ...
    et return !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function nefaitrien(){
        return;
     
        while( true ){
            console.log( "je ne m'arrête jamais" );
       }
    }
    Avec un booléen :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var boolOK = true;
     
    function launchGallerySlider(){
    	// code
     
        setTimeout( function(){
        	if ( boolOK ){
        		launchGallerySlider();
        	}
        }, 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.)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci de ta réponse, mais c'est précisément ce que j'ai fait ; je l'ai plus ou moins refait à ta façon.

    Ça donne le code suivant mais toujours sans le délai de 6000 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $runGallerySlider = false;
    var $text = $(this).find('figcaption').text();
    $('#loadingPhotos').fadeIn(600, function() {
        $('#gallery > ul').hide(0);
        $(this).delay(1000).fadeOut(1200, function() {
            $('#gallery > ul').slideDown(600, function() {
                setTimeout(function(){return;}, 6000, function() {
                    $runGallerySlider = true;
                });
            });
        });
    });
    Dernière modification par Bovino ; 24/07/2013 à 16h09. Motif: Désindentation !!!

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setTimeout(function(){return;}, 6000, function() {
        $runGallerySlider = true;
    });


    C'est pas comme ça qu'on utilise setTimeout()...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 328
    Par défaut
    où déifnit tu la variable $runGallerySlider ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function launchGallerySlider($runGallerySlider) {
     //...
    }
    soit c'est une variable que tu passe en paramètre, et dans ce cas tu ne pourra que difficilement la modifier de l'extérieur, soit c'est une variable globale (de window plus précisément), et dans ce cas tu n'a pas besoin de la passer en paramètre


    Sinon, je pense que ça répondra a ton besoin plus que cette histoire de booléen, la fonction setTimeOut renvoie une valeur que tu peux utiliser pour l'arrêter.

    Code : 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
     
    var nextTimeoutId = null ;
     
    function launchGallerySlider() {
            var $presentGallerySlide = $('#gallery > ul > li:visible');
            var $nextGallerySlide = $('#gallery > ul > li:visible').next('li');
            if ($nextGallerySlide.length < 1) {
                $nextGallerySlide = $('#gallery > ul > li:first-of-type');
            }
            $presentGallerySlide.fadeOut();
            $nextGallerySlide.fadeIn();
            nextTimeoutId = setTimeout('launchGallerySlider()', 6000);
    }
     
    function stopGallerySlider() {
            clearTimeout(nextTimeoutId) ;
    }
    Plus qu'à appeller la fonction stopGallerySlider quand tu veux stopper.

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nextTimeoutId = setTimeout(launchGallerySlider, 6000);
    est un peu plus "propre"...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

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

Discussions similaires

  1. Délai avant exécution d'un SlideToggle
    Par sebiv dans le forum jQuery
    Réponses: 0
    Dernier message: 20/03/2014, 17h19
  2. [Toutes versions] Délai avant l'éxecution des macros depuis le diaporama
    Par Toussec dans le forum Powerpoint
    Réponses: 0
    Dernier message: 05/09/2013, 17h00
  3. Délai avant affichage
    Par doudoule dans le forum EDT/SwingWorker
    Réponses: 0
    Dernier message: 06/05/2012, 16h54
  4. Réponses: 2
    Dernier message: 24/04/2009, 08h11
  5. [W10]Délai avant execution d'un traitement
    Par Vyl.Coyot dans le forum WinDev
    Réponses: 5
    Dernier message: 25/11/2007, 22h31

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