-2

我正在做一些长时间的轮询。当某个陈述为真时,我有一个让按钮闪烁的功能。这里是:

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 时停止使按钮闪烁。这听起来很容易,但我什么都试过了哈。

我一直在研究和尝试不同的东西,但它似乎不起作用。

4

2 回答 2

1

如果您的变量计时器是全局的,那么您应该能够使用以下方法清除间隔:

clearInterval(timer);

从 setInterval 返回的整数对于该计时器是唯一的,因此您需要清除它。

于 2013-01-07T21:14:56.533 回答
0

这是一个简单的实现。

http://jsfiddle.net/AQgBc/

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 并清除该间隔。

编辑以回应评论:

如果您希望它在用户操作之前一直闪烁,然后停止轮询,那就更简单了。

http://jsfiddle.net/AQgBc/1/

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();
于 2013-01-07T21:22:03.467 回答