ClearInterval() не остановит мою функцию поворота

Я использую плагин jQuery Rotate, чтобы анимировать поворот изображения на 90 градусов, а затем остановить вращение.

Моя проблема в том, что он не перестанет вращаться даже после вызова clearInterval();

$(document).ready(function() {
    var finalAngle;
    var intval = setInterval(function func() 
    {
      $("#myimg").rotate(1);
      if(typeof func.angle == 'undefined' )
      {
           func.angle = 0;
      }

      func.angle += 1;

      finalAngle = func.angle;

    }, 1);

    if(finalAngle == 90)
    {
      clearInterval(intval);
    }
});

В основном все, что я делаю, это (статически) подсчитываю углы, и как только он достигает 90, вызываю функцию clearInterval. Мне пришлось ввести еще одну переменную для хранения счетчика, чтобы я мог получить к нему доступ вне функции setInterval.


person Brownbay    schedule 20.08.2010    source источник
comment
Вы проверяете переменную finalAngle только один раз. Вы должны переместить эту проверку в обратный вызов setInterval.   -  person Michal    schedule 20.08.2010


Ответы (2)


Это просто. setInterval вызывается, затем оценивается условие с finalAngle, и через одну миллисекунду вызывается ваша вращающаяся функция. Поэтому clearInterval никогда не вызывается, когда finalAngle равно 90.

Этот код должен работать для вас:

$(document).ready(function() {

    var intval = setInterval(function func() 
    {
      $("#myimg").rotate(1);
      if(typeof func.angle == 'undefined' )
      {
           func.angle = 0;
      }

      func.angle += 1;

      if (func.angle == 90)
      {
        clearInterval(intval);
      }    
    }, 1);  
});
person Martin Vseticka    schedule 20.08.2010

Оператор if выполняется один раз. Попробуй это?

$(document).ready(function() {
    var finalAngle;
    var intval = setInterval(function func() 
    {
      $("#myimg").rotate(1);
      if(typeof func.angle == 'undefined' )
      {
           func.angle = 0;
      }

      func.angle += 1;
      finalAngle = func.angle;
      if(finalAngle == 90)
      {
          clearInterval(intval);
      }


    }, 1);


});

Хотя я не понимаю, почему ты не можешь просто уйти с...

$(document).ready(function() {
    var finalAngle=0;
    var intval = setInterval(function func() 
    {
      $("#myimg").rotate(1);

      finalAngle++;

      if(finalAngle == 90)
      {
          clearInterval(intval);
      }


    }, 1);


});
person meder omuraliev    schedule 20.08.2010
comment
Ух... Я такой болван. Я мог бы поклясться, что мой if был ВНУТРИ функции заданного интервала. Благодарю за быстрое исправление! - person Brownbay; 20.08.2010