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);
});
我有點困惑,爲什麼我要遞減兩次而不向前移動時遞增。你能解釋嗎?我猜測,自從我編寫代碼以來,我只是忽略了我創建的錯誤。無論哪種方式,我永遠感激!謝謝! – Hoppe
displayNext()調用updateCounter(true)本身。由於您在下一個按鈕處理程序中也調用了updateCounter,因此它會將計數器遞增兩次,從而跳過一個div。此外,要顯示前一個div,必須將該計數器移回兩次,因爲向後移動一次只會反覆顯示相同的div。 –
看起來我在更新計數器之前正在顯示下一個,但是您的修補程序確實有效!所以我會聽取你的意見。再次感謝 – Hoppe