2010-03-28 5 views
0

J'essaie de faire en sorte que lorsqu'un élément de navigation est cliqué, il rétracte le ticker de nouvelles sur la droite, puis n'exécute plus aucune des fonctions d'extraction/temporisation. Je l'ai eu pour se rétracter mais ça reste extrait. Comment je le fais, c'est que j'ajoute une classe "noTicker" avec les boutons nav et je l'enlève avec le bouton de fermeture de colorbox. La fonction s'exécute sur la page initialement et s'il n'y a pas de classe "noTicker", elle lance le ticker des nouvelles comme prévu. Quand un bouton de navigation ou de fermeture est cliqué, il exécute à nouveau la fonction qui vérifie à nouveau pour voir si elle a cette classe. Donc, si elle a la classe, elle devrait se rétracter (ce qui signifie qu'elle ajoute correctement la classe), puis ne pas exécuter les fonctions de minuterie, mais elle exécute quand même les fonctions de minuterie pour une raison ou une autre. Voici ma jQuery. Il ne supprime également pas la classe correctement lorsque le bouton de fermeture est cliqué, selon firebug.Jquery hasClass conditionnel ne fonctionne pas

/* Initially hide all news items */ 

$('#ticker1').hide(); 
$('#ticker2').hide(); 
$('#ticker3').hide(); 

var randomNum = Math.floor(Math.random()*3); /* Pick random number */ 

newsTicker(); 

function newsTicker() { 

    if (!$("#ticker").hasClass("noTicker")) { 

     $("#ticker").oneTime(2000,function(i) { /* Do the first pull out once */ 

      $('div#ticker div:eq(' + randomNum + ')').show(); /* Select div with random number */ 

      $("#ticker").animate({right: "0"}, {duration: 800 }); /* Pull out ticker with random div */ 

     }); 

     $("#ticker").oneTime(15000,function(i) { /* Do the first retract once */ 

      $("#ticker").animate({right: "-450"}, {duration: 800}); /* Retract ticker */ 

      $("#ticker").oneTime(1000,function(i) { /* Afterwards */ 

       $('div#ticker div:eq(' + (randomNum) + ')').hide(); /* Hide that div */ 

      }); 

     }); 

     $("#ticker").everyTime(16500,function(i) { /* Everytime timer gets to certain point */ 

      /* Show next div */ 

      randomNum = (randomNum+1)%3; 

      $('div#ticker div:eq(' + (randomNum) + ')').show(); 

      $("#ticker").animate({right: "0"}, {duration: 800}); /* Pull out right away */ 


      $("#ticker").oneTime(15000,function(i) { /* Afterwards */ 

       $("#ticker").animate({right: "-450"}, {duration: 800});/* Retract ticker */ 

      }); 

      $("#ticker").oneTime(16000,function(i) { /* Afterwards */ 

       /* Hide all divs */ 

       $('#ticker1').hide(); 
       $('#ticker2').hide(); 
       $('#ticker3').hide(); 

      }); 

     }); 

    } else { 

     $("#ticker").animate({right: "-450"}, {duration: 800}); /* Retract ticker */ 

     $("#ticker").oneTime(1000,function(i) { /* Afterwards */ 

      $('div#ticker div:eq(' + (randomNum) + ')').hide(); /* Hide that div */ 

     }); 

    } 

} 

/* when nav item is clicked re-run news ticker function but give it new class to prevent activity */ 

$("#nav li").click(function() { 

    $("#ticker").addClass("noTicker"); 

    newsTicker(); 

}); 

/* when close button is clicked re-run news ticker function but take away new class so activity can start again */ 

$("#cboxClose").click(function() { 

    $("#ticker").removeClass("noTicker"); 

    newsTicker(); 

}); 

Merci,

Wade

Répondre

1

Il ne ressemble pas à votre minuterie EveryTime() sera être annulé lorsque vous ajoutez la classe noTimer à votre #ticker div. Le premier appel à newsTicker() va probablement mettre cela en marche, cependant, je ne vois pas que les appels suivants l'arrêteront. Si je lis la documentation correcte, vous pouvez donner à votre minuteur une étiquette (chaîne), puis pour l'arrêter, vous pouvez appeler stopTime() et fournir l'étiquette.

Voici la documentation Je travaille à partir de: http://plugins.jquery.com/project/timers

+0

Cela est logique, je me demande comment je peux arrêter le chronomètre. –

+0

Mis à jour avec l'info. –

+0

J'ai ajouté $ ("# ticker"). StopTime(); à l'instruction else qui a fonctionné, mais la removeClass ne fonctionne toujours pas pour le bouton de fermeture, elle ne s'affiche donc plus après la fermeture de colorbox. –