2012-07-06 5 views
3

최근에 setInterval 및 clearInterval을 사용하여 많은 경험을 쌓아 왔으며 맞춤 효과를 만들기 위해 노력하고 있습니다. 글로벌 범위를 벗어나지 않는 간격. 나는 최근까지 위로jQuery를 사용하여 .promise()를 호출하여 clearInterval()을 호출합니다.

//caller is a collection of elements 
function performEffect(caller) { 
    var interval = setInterval(function() { caller.next(); }, 500); 
    caller.promise().done(function() { interval = clearInterval(interval); }); 
} 

: 나는 가독성을 향상시키고 사항 clearInterval()를 호출하는 .promise()를 사용하여 가능한 성능 부스트를 탐구하는 시도하고 (아래 내가 할 노력하고있어의 예입니다) 임베디드 기능 (예 :)을 사용하여 간격을 설정하고 지우고있었습니다 (예 :

PS 원본을 게시하지 않아 죄송합니다. 내 버전 시스템이 손상되었습니다. 또한이 예제는 for-loop 나 .each()를 쉽게 사용할 수 있기 때문에 어리석은 일임을 알고 있습니다.하지만 예제 일뿐입니다. 루프를 사용하지 않을 인스턴스가 있습니다.

이것은 내 첫 번째 게시물이므로 허용 된 관행과 다른 뭔가를하면 사전에 사과드립니다. 앞으로 내 소식을 개선하기 위해 할 수있는 일이 있다면 알려주세요. 저는 항상 건설적인 비판에 열려 있습니다. :)

고마워!

답변

5

이 작업에는 지연을 사용하려고합니다. 나는 약간의 통찰력을 줄 수있는 jsfiddle에 대한 예제를 썼습니다. 당신은 일반적으로 deferreds를 오해하거나 당신이 무엇을하고 있는지 말해 여기만큼 코드가없는 것처럼 코드에서

http://jsfiddle.net/landau/M3Lj4/

, 그것은 보인다. 약속은 resolvingrejecting 기능이 기본적으로

숨 깁니다

var deferred = $.Deferred(); 
var promise = deferred.promise(); 

// This will only run once 
var timer = setInterval(function() { 
    deferred.resolve(); 
}, 1000); 

promise.done(function() { 
    clearInterval(timer); 
}); 
+0

신난다! 이것은 내가 찾고 있었던 바로 그 것이다. 내가 지연을 오해 할 수도 있으므로 계속하기 전에 지연에 대해 더 자세히 읽어 보도록하겠습니다. 정말 고마워. –

+0

질문에 대한 답변이라면 확인란을 클릭하십시오. :) – Trevor

+0

죄송합니다, thanks :) –