2011-07-29 34 views
0

我有一些JavaScript循環訪問n個div標籤,每次只顯示一個,每10秒更改一次。這是行得通的。但我也有下一個和上一個按鈕。當我點擊下一個或上一個時,他們似乎跳過了一個div。JavaScript定時器 - 清除,設置新的,通過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

最簡單的辦法從你的下一個按鈕處理程序刪除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

我有點困惑,爲什麼我要遞減兩次而不向前移動時遞增。你能解釋嗎?我猜測,自從我編寫代碼以來,我只是忽略了我創建的錯誤。無論哪種方式,我永遠感激!謝謝! – Hoppe

+0

displayNext()調用updateCounter(true)本身。由於您在下一個按鈕處理程序中也調用了updateCounter,因此它會將計數器遞增兩次,從而跳過一個div。此外,要顯示前一個div,必須將該計數器移回兩次,因爲向後移動一次只會反覆顯示相同的div。 –

+0

看起來我在更新計數器之前正在顯示下一個,但是您的修補程序確實有效!所以我會聽取你的意見。再次感謝 – Hoppe