我正在进行一些长轮询...我有一个函数可以在某个语句为真时使按钮闪烁。这是:
function blinking(object, x) {
console.log(x);
if(x>0){
var existing_timer = object.data('clock');
if (existing_timer){
clearInterval(existing_timer);
}
timer = setInterval(blink, 10);
function blink() {
object.fadeOut(400, function() {
object.fadeIn(400);
});
}
}
}
现在..注意计时器被设置为'计时器'。当有人做了使语句失败的事情(使x = 0)时,我希望计时器在看到x = 0时停止使按钮闪烁。这可能听起来很容易,但我已经尝试了所有的事情。
我一直在研究和尝试不同的事情,但它似乎没有用。
答案 0 :(得分:1)
如果你的变量计时器是全局的,那么你应该能够使用它来清除间隔:
clearInterval(timer);
setInterval返回的整数对于该计时器是唯一的,因此您需要清除它。
答案 1 :(得分:0)
这是一个简单的实现。
var $led = $('#led'),
blinkState = 0,
blinkTimer,
blinkDuration = 300,
blink = function () {
if (blinkState) {
$led.toggleClass('on');
}
console.log('blink');
blinkTimer = setTimeout(blink, blinkDuration);
};
$('button').on('click', function () {
blinkState = (blinkState) ? 0 : 1;
});
blink();
我只是编写了自己的内容而没有重复你的内容,但我认为最相关的问题是使用setTimeout而不是担心setInterval并清除该间隔。
编辑以回复评论:
如果您希望它在用户操作之前闪烁,然后停止轮询,则更简单。
var $led = $('#led'),
blinkState = 1,
blinkTimer,
blinkDuration = 300,
blink = function () {
if (blinkState) {
console.log('blink');
$led.toggleClass('on');
blinkTimer = setTimeout(blink, blinkDuration);
}
};
$('button').on('click', function () {
blinkState = (blinkState) ? 0 : 1;
});
blink();