我正在尝试循环索引i
的数组。
它目前每5秒增加i
。
但是,我想添加手动递增i
的选项,这应该将计时器重置为5秒(5000)
。我如何成功实现这一目标?
所以,例如,
[a, b, c, d, e, f, g]
一开始,它应显示(或我后面选择的任何功能)" a",等待5秒,显示" b" 如果我按下右箭头键,它应该立即移动到" c",然后再等5秒钟,除非我按下 - >再次。
我尝试将增量放在一个单独的函数中,但这不能很好地工作。
function doThis() {
if (i < (l + 1)) {
$('#myDiv').html(myArray[i]);
i++;
if (i == (l + 1)) {
doNext();
}
}}
var intervalHandle = setInterval(doThis, 5000); // start the interval by default
var running = true; // true if the interval is running, false if its not.
$("body").keydown(function (e) {
if (e.keyCode == 39) {//right
console.log("testing");
if (running) {
clearInterval(intervalHandle); // stop interval
running = false; // mark interval as stopped
} else {
intervalHandle = setInterval(doThis, 5000); // start interval
running = true; // mark interval as started
doThis(); // also change the image right now
}
} else {
e.preventDefault();
}
});
function doNext(){
//something here, when i ==l+1 as noted above
}
答案 0 :(得分:1)
一种可能的解决方案是将您的工作包装在一个闭包中,而不是直接调用setInterval,您将调用一个函数来调用setInterval,然后返回一个可用于重置间隔并增加传入值的函数。 / p>
function startInterval(i) {
var interval = setInterval(function() {
i++
}, 5000);
return function() {
clearInterval(interval)
i++;
interval = setInterval(function() {
i++
}, 5000);
}
}
var i = 0;
var manualIncrement = startInterval(i);
$('body').keydown(function(e) {
if(e.keyCode === 39) {
manualIncrement();
} else {
e.preventDefault();
}
})