2017-05-02 3 views
0

Pour la vie de moi, je ne peux pas comprendre comment effacer les délais d'attente dans un tableau s'ils existent.Effacer les délais dans le tableau s'ils existent

J'ai un site web d'une seule page (SPA) (http://www.rock3t.ca/) et les ID se développent chaque fois que vous cliquez très rapidement sur "Accueil", ce qui ne semble pas annuler les délais d'attente. Visitez le site et vous verrez le slogan sous le logo au centre changer à un rythme très rapide puis ralentir. Cliquez sur "Accueil" plusieurs fois rapidement pour voir comment il réagit. Il n'a pas effacé, vous remarquerez des blips.

//slogans 
function loadSlogans(){ 

    //slogan timeouts 
    var sloganTimeouts = []; 

    //slogans 
    var slogans = ['Websites', 'Apps', 'Media', 'Code', 'SEO', 'CRM','Ads','Flyers','Logos','Games','Streams','Web','Websites', 'Apps', 'Media', 'Code', 'SEO', 'CRM','Ads','Flyers','Logos','Games','Streams','Web']; 

    var sloganTime = 100; 
    var sloganTimeFade = 0; 
    var slogans_length = slogans.length; 
    var sloganHalfTime = slogans_length/2; 

    //clear slogan timeouts 
    $(slogans).each(function(i){ 

     //clear timeout if exists 
     if(typeof sloganTimeouts[i] !== "undefined"){ 
      clearTimeout(sloganTimeouts[i]); 
     } 
    }); 

    //slogan timeout 
    function runSloganTimeout(i) { 

     //easing out time when half way 
     if(i > sloganHalfTime){ 
      sloganTimeFade++; 
      sloganTime = (i * 100) + (sloganTimeFade * 100) * (sloganTimeFade/4); 
     }else{ 
      sloganTime = i * 100; 
     } 

     //set timeouts 
     sloganTimeouts[i] = setTimeout(function(){ 

      //append slogans 
      $('#slogan span').html(slogans[i]); 

     },sloganTime); 
    } 

    //each slogan 
    $(slogans).each(function(i){ 

     //run 
     runSloganTimeout(i); 
    }); 
} 

Merci

Répondre

0

Il a autorisé, mais le processus précédent n'a pas plus, afin de ne pas effacer tous les délais d'attente à venir. L'une des solutions: ajoutez processId global var et interrompez le processus précédent. Voir mon exemple: Plunker

var processId = 0; 

//slogans 
function loadSlogans(){ 

    processId++; 

    var selfProcessId = processId; 

    //slogan timeouts 
    ... 
    //slogans 
    ... 
    //clear slogan timeouts 
    ... 

    //slogan timeout 
    function runSloganTimeout(i) { 
     //easing out time when half way 
     ... 
     //set timeouts 
     sloganTimeouts[i] = setTimeout(function(){ 
      //append slogans 
      if(selfProcessId == processId) 
       $('#slogan span').html(i+slogans[i]); 

     },sloganTime); 
    } 

    //each slogan 
    $(slogans).each(function(i){ 

     //run 
     if(selfProcessId == processId) 
      runSloganTimeout(i); 
    }); 
} 
+0

fait toujours la même chose. – rcsnooks

+0

Si je lis bien votre code, vous n'avez pas besoin des clauses if. Ils seront TOUJOURS égaux à la même chose. Pourquoi les avoir? – rcsnooks

+0

Pas toujours, ils existent dans des contextes différents. Avez-vous essayé de pousser le bouton rapidement, en supprimant si les clauses, l'avez-vous essayé à nouveau? –