2014-10-12 3 views
0

Я пытаюсь создать элемент shake, вот код, с jquery library 'jquery.transit'.Каков наилучший способ остановить рекурсивный обратный вызов?

var s = $('myele'); 
var randomTran = function(){ 
    var rh = Math.floor((Math.random() * 10) - 5), 
     rv = Math.floor((Math.random() * 10) - 5); 
    s.transit({x:rh,y:rv},50,randomTran) 
    } 

Проблема заключается элемент будет трясти постоянно, мне нужно поставить какой-то знак остановки рекуррентного обратного вызова. Я могу подумать о том, чтобы установить переменную вне функции в качестве флага.

var s = $('myele'); 
var flag = 0; 
var randomTran = function(){ 
    if (flag<6) { 
     var rh = Math.floor((Math.random() * 10) - 5), 
     rv = Math.floor((Math.random() * 10) - 5); 
     s.transit({x:rh,y:rv},50,randomTran) 
    }; 
    flag++; 
    } 

Но с этим я чувствую запах глобальной переменной. Итак, вопрос 1 - лучший способ сделать это? Вопрос 2: Есть ли какой-либо плагин, способный встряхнуть элемент?

ответ

4

Вы можете сделать то же самое, не глобальный:

var randomTran = function(flag){ 
    flag = flag || 0; 
    if (flag<6) { 
    var rh = Math.floor((Math.random() * 10) - 5), 
     rv = Math.floor((Math.random() * 10) - 5); 
    s.transit({x:rh,y:rv},50,randomTran.bind(this, ++flag)) 
    }; 
} 

За исключением s, это не зависит от каких-либо внешних переменных и, как написано, не требует, чтобы изменить какой-либо другой код.

+0

Вы правы, используя количество дротиков слева как параметр - лучшее решение. – Cristy

+0

Спасибо! Является ли 'flag || = 0?' Опечаткой? И ваш ответ указывает на то, что я назвал элемент, поскольку переменная '' 'не является хорошей практикой, если да, что мне делать? – shenkwen

+0

Извините, что trailing '?' Должен был быть ';' – Dancrumb

0

Почему это глобально? Вы можете просто прикрепить его к объекту s.

var s = $('myele'); 
s.shakesLeft = 10; 

var randomTran = function() { 
    if (s.shakesLeft--) { 
     var rh = Math.floor((Math.random() * 10) - 5), 
      rv = Math.floor((Math.random() * 10) - 5); 
     s.transit({x:rh,y:rv},50,randomTran) 
    } 
}