2017-05-02 1 views
0

나를 기다리는 동안 배열에 타임 아웃이있는 경우이를 지우는 방법을 알 수 없습니다.배열에 타임 스탬프가 존재하지 않으면 지우십시오.

단일 페이지 응용 프로그램 (SPA) 웹 사이트 (http://www.rock3t.ca/)를 가지고 있으며 "홈"을 매우 빠르게 클릭 할 때마다 ID가 커지므로 시간 초과가 취소되지 않습니다. 사이트를 방문하면 센터 로고의 슬로건이 매우 빠르게 변화하고 느려집니다. "홈"을 여러 번 빨리 클릭하면 반응하는 방식을 볼 수 있습니다. 그것은 지워지지 않았고, 당신은 일시적으로주의를 기울일 것입니다.

//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); 
    }); 
} 

감사

답변

0

은 삭제했지만, 이전 프로세스는 명확하지 않도록 모든 다가오는 시간 제한, 이상하지 않았다. 해결책 중 하나 : processId 글로벌 var을 추가하고 이전 프로세스를 중단합니다. 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

여전히 같은 일을 내 예를 참조 . – rcsnooks

+0

코드를 올바르게 읽는다면 if 절이 필요하지 않습니다. 그들은 항상 똑같을 것입니다. 왜 그걸 가지고 있니? – rcsnooks

+0

항상 다른 문맥에 존재합니다. 버튼을 빨리 밀고, 절을 제거하고, 다시 시도해 보셨습니까? –

관련 문제