2011-07-29 6 views
0

한 번에 하나씩 표시하고 10 초마다 변경되는 n div 태그를 순환하는 JavaScript가 있습니다. 이것은 작동 중입니다. 하지만 다음 버튼과 이전 버튼도 있습니다. 그들은 다음 또는 이전을 클릭하면 한 div를 건너 뛰는 것 같습니다.자바 스크립트 타이머 - 지우기, 새 설정, div를 통한 순환

누군가 도움을 줄 수 있습니까?

더 나은 방법에 대한 제안도 환영합니다. 나는 jQuery를 처음 사용하기 때문에 어쨌든 내가하고 싶은 몇 가지 개선점을 알고 있습니다. 감사!!!

jQuery(document).ready(function() { 
    var counter = 1; 
    var delay = 3000; //10 seconds = 10000 
    var lastItem = jQuery('table[id^=featuredNo]').length - 1; 
    var previous = 0; 
    var timerID; 

    //argument is increment 
    //false is decrement 
    function updateCounter(increment) { 
     if (increment) { 
      counter = (counter >= lastItem) ? 0 : counter + 1; 
      previous = (previous >= lastItem) ? 0 : previous + 1; 
     } else { 
      counter = (counter <= 0) ? lastItem : counter - 1; 
      previous = (previous <= 0) ? lastItem : previous - 1; 
     } 
    } 

    function displayNext() { 
     //alert("testt" + counter); 

     //hide everything but current 
     jQuery("table[id^=featuredNo]").hide(); 
     jQuery("#featuredNo" + counter).show(); 

     //incrememnt the counter, so next time we show the next one 
     updateCounter(true); 
    }; 

    //set click handlers for previous 
    jQuery('a[id^=featuredPrevious]').click(function() { 
     clearInterval(timerID); 

     updateCounter(false); 

     displayNext(); 
     timerID = setInterval(displayNext, delay); 
    }); 

    //set click handlers for next 
    jQuery('a[id^=featuredNext]').click(function() { 
     clearInterval(timerID); 

     updateCounter(true); 

     displayNext(); 
     timerID = setInterval(displayNext, delay); 
    }); 


    //start interval 
    timerID = setInterval(displayNext, delay); 
}); 

답변

1

가장 간단한 솔루션은 이전 버튼 핸들러 (false)를 다른 updateCounter를 다음 단추 처리기에서 (사실) updateCounter을 제거하고, 추가 :

//set click handlers for previous 
jQuery('a[id^=featuredPrevious]').click(function() { 
    clearInterval(timerID); 

    updateCounter(false); 
    updateCounter(false); 

    displayNext(); 
    timerID = setInterval(displayNext, delay); 
}); 

//set click handlers for next 
jQuery('a[id^=featuredNext]').click(function() { 
    clearInterval(timerID); 

    displayNext(); 
    timerID = setInterval(displayNext, delay); 
}); 
+0

내가 조금 I가 왜 혼란 스러워요 앞으로 이동하면 두 번 감소하고 증가하지 않습니다. 설명 할 수 있습니까? 나는 내가 작성한 버그를 간과하고있는 코드를 작성한 이후로 추측하고 있습니다. 어느쪽으로 든, 나는 영원히 감사한다! 감사! – Hoppe

+0

displayNext()는 updateCounter (true) 자체를 호출합니다. 다음 버튼 핸들러에서도 updateCounter를 호출 했으므로 카운터를 두 번 증가시켜 div를 건너 뜁니다. 또한 이전 div를 표시하려면 카운터를 두 번 뒤로 이동해야합니다. 한 번 뒤로 이동하면 동일한 div가 반복해서 표시되기 때문입니다. –

+0

카운터를 업데이트하기 전에 다음 것을 표시하는 것처럼 보입니다.하지만 수정이 트릭을했습니다! 그래서 나는 당신의 말을 들어 줄 것입니다. 다시 한 번 감사드립니다. – Hoppe

관련 문제