2011-08-25 4 views
0

나는 아래의 현재 함수를 가지고 있지만 같은 것을 작성하는 훨씬 더 좋은 방법이있는 것처럼 느낀다. 아래에서 동일한 기능을 쓰는 가장 최적화 된 방법에 대한 통찰력을 찾고 있습니다.setInterval보다 나은 방법은 무엇입니까?

참고이 당신이 시간이 지남에 따라 요소의 동작을 전환 할 것인지 무엇을하고 있는지에 따라, $(function(){});

m = function(){ 
    $("#id").animate({marginRight : 0}, 'slow', function(){ 
     $("#id").animate({marginRight : "15px"}, 'slow'); 
    }) 
} 
setInterval(m, 700)  

답변

3
m = function(){ 
    $("#id").animate({marginRight : 0}, 'slow', function(){ 
     $("#id").animate({marginRight : "15px"}, 'slow',m); 
    }); 
} 
m(); 

것 같다 모든 내부입니다. 두 번째, 내부 애니메이션이 완료되었을 때 원래 함수 m()을 콜백으로 설정할 수 있습니다.

+2

700ms 지연을 어떻게 존중합니까? – Marc

+0

그것은 일단 애니메이션이 완료되면 처음부터 토글 링을 활성화하는 데 사용 된 것 같습니다. 숫자가 중요하지 않다. 내가 코드 – Maz

+0

@ Maz를 오인하고 있지 않다면, 숫자가 정말로 중요하지 않다. 일단 완료되면 다시 함수를 호출하고 싶을 것이다. – jeffreynolte

1

다시 찾지 않고 첫 번째 애니메이션 콜백 내에서 this을 즉석 사용할 수 있습니다. 그 외에는 더 이상 개선 할 수 없다고 생각합니다.

m = function(){ 
    $("#id").animate({marginRight : 0}, 'slow', function(){ 
     $(this).animate({marginRight : "15px"}, 'slow'); 
    }) 
} 
setInterval(m, 700); 
3
(function m(){ 
    $("#id").animate({marginRight : 0}, 'slow', function(){ 
     $(this).animate({marginRight : "15px"}, 'slow',function(){ 
      setTimeout(m,700); 
     }); 
    }); 
})(); 

편집 : 그것의 setTimeout을 사용

이전이 완료 될 경우에만 새 대기열 때문에, 그러나,의 setTimeout setInterval을보다 더 나은 솔루션입니다. 이렇게하면 jquery 1.6이 현재 사용하고있는 RAF 관련 문제를 방지 할 수 있습니다.

관련 문제