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