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 :

clearInterval + setInterval au clic ?


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut clearInterval + setInterval au clic ?
    Bonjour à tous,

    Je rencontre un problème avec les fonctions setInterval et clearInterval.

    L'ensemble de mon code est assez complexe, je crois donc qu'il sera plus simple de vous présenter juste une version très réduite du bout de code qui me pose souci.

    Lors d'un clic, je voudrais commencer par annuler un setInterval (qui a été effectué lors d'un clic précédent sur un autre élément) avant de relancer un nouveau setInterval correspondant au dernier élément cliqué.

    Sur les autres éléments cliqués, j'arrive à annuler ou à lancer le setInterval, mais ici, en essayant de faire les deux à la fois, ça ne fonctionne pas.

    Je suppose donc que je rédige mal mon code et que l'appel de ces deux fonctions clear et set lors d'un même clic les rend incompatibles entre elles.
    Je pensais que ça s'enchainait de manière chronologique, mais apparemment je faisais erreur :-/

    Comment puis-je m'y prendre ?



    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
    19
     
    $(document).ready(function(){	   	
     
    	$('.tabMenuWB > li:not(.blind, .lastblind)').click(function(){
     
    		if (($(this).hasClass("close")) && (image != 1)){
     
    			window.clearInterval(twb);
     
    			<!-- Code qui ferme la div 1 et ouvre la div 2 -->
     
    			  twb = setInterval(function(){  
    				 $(".framebox ul.multishow").animate({marginLeft:-605},800,function(){  
    					$(this).css({marginLeft:0}).find("li:last").after($(this).find("li:first"));  
    				 })  
    			  }, 1500);
    		}
    	});
    });

  2. #2
    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
    Le problème, c'est que "ça ne fonctionne pas", c'est pas très précis pour déterminer l'origine du problème...

    Donc déjà, il n'y a pas d'incompatibilité entre un set et un clear dans une même fonction.
    Ensuite, peut-être tout simplement que la variable twb n'est pas accessible dans le scope de la fonction...
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Désolé, à trop vouloir simplifier, je n'ai peut-être pas suffisamment précisé les choses.

    Ce script est supposé faire apparaître et disparaître (en jQuery) des divs dans lesquels se trouvent des slideshows assez basiques (qui reposent également sur du jQuery).

    Lors du clic sur chaque onglet, la div contenant le slideshow correspondant s'ouvre ou se ferme.

    Mais dans un cas de clic bien précis (celui qui me pose problème), à savoir lorsqu'un slideshow est ouvert et que l'on clique sur un autre onglet, cela ferme la div 1 et ouvre la div 2, contenant donc le slideshow 2.

    Mon problème est que dans ce cas-là, la vitesse de défilement des slides (1500 dans ce cas précis) n'est plus respectée ; les slides s'enchaînent à toute vitesse. Il y a donc sans doute un problème quelque part.

    Par "la variable twb n'est pas accessible dans le scope de la fonction" je suppose que tu veux dire que la fonction ne peut pas utiliser cette variable ?

    Je ne pense pas que ça soit le problème, car tout est dans le même script et mes 2 autres types de clics (que j'ai supprimés dans le code que je vous ai montré) ont l'air de fonctionner comme prévu.

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Pourquoi annuler et relancer un interval alors que tu pourrais toujours mettre la même fonction et changer des variables externes ?

    http://jsfiddle.net/3Fmky/

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Merci pour la piste, je ne suis pas assez calé en JS et jQuery pour mettre ce genre de choses en place de façon autonome et spontanée

    Néanmoins, je ne suis pas certain que cette solution soit adaptée à ce que je souhaite réaliser.

    D'une part, je trouverais plus logique que la fonction ne soit pas effectuée en boucle lorsque tous les onglets sont sur OFF (donc aucun slideshow n'est visible). Je peux me tromper, mais je me dis que ça utiliserait des ressources système pour rien (ne pas oublier qu'il ne s'agit pas de simples calculs, mais de déplacer des images à l'infini).

    D'autre part, l'opération à réaliser est la même pour tous mes slideshows. Donc je ne vois pas trop ce qui pourrait faire office de paramètre "variable".

    Si je suis dans l'erreur, n'hésite pas à me corriger.

    Donc, je suis toujours à la recherche de ce qui coince dans mon script...

  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
    Bonsoir

    Mon problème est que dans ce cas-là, la vitesse de défilement des slides (1500 dans ce cas précis) n'est plus respectée ; les slides s'enchaînent à toute vitesse. Il y a donc sans doute un problème quelque part.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $(".framebox ul.multishow").animate({marginLeft:-605},800,function(){
        $(this).css({marginLeft:0}).find("li:last").after($(this).find("li:first"));
    });
    L'animation place la marge gauche à -605 pixels, et dans la fonction de rappel on la ramène brutalement à 0 pixel !

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

Discussions similaires

  1. Arrêter une série de setInterval avec clearInterval
    Par Feno59 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 26/09/2014, 16h19
  2. Clic droit/gauche souris
    Par Mouse! dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 30/05/2013, 20h34
  3. SetInterval et ClearInterval.
    Par janetdream dans le forum Flash
    Réponses: 2
    Dernier message: 03/02/2007, 11h04
  4. [flash MX] probleme avec setinterval et clearinterval
    Par yacinechaouche dans le forum Flash
    Réponses: 3
    Dernier message: 15/04/2004, 12h07
  5. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 16h11

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