2014-10-12 6 views
0

여기, 요소 쉐이크를 만들려고는 jQuery 라이브러리 '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? '오타가 있습니까? 그리고 당신의 답은 요소의 이름을 변수's'로 지정하는 것이 좋은 습관이 아니라는 것을 나타냅니다. 그렇다면 어떻게해야합니까? ?, 그 후행' – shenkwen

+0

죄송의''있었어야;' – 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) 
    } 
} 
관련 문제