2014-07-10 5 views
1

I는 다음과 같은 구조의 setTimeout 함수를 이용한 애니메이션을 수행하는 기능을 가지고 난과 연관된 오브젝트를 생성하고이전의 setTimeout 함수에 의해 생성 된에서는 setTimeout 함수 객체 조작

animation: function() { 
    //first 
    setTimeout(function(){ 
    makeObject({ ... }); // this makes '#object .secondary' on the DOM 
    }, 500); 
    //second 
    setTimeout(function(){ 
    ... 
    }, 1000); 
    //third 
    setTimeout(function(){ 
    $('#object .secondary').doSomething(); 
    }, 1500); 

} 

를 ' .secondary 'CSS 클래스를 첫 번째 setTimeout 함수를 누른 다음 개체를 선택하고 세 번째 함수에서 클래스 이름을 사용하여 조작하려고합니다. 그러나 개체는 세 번째 함수가 실행 된 후에도 변경되지 않고 "Undefined is a function"오류가 발생합니다. 이것은 setTimeouts가 동시에 실행되므로 세 번째 함수에 의해 선택 될 보조 오브젝트가 아직 존재하지 않기 때문이라고 생각합니다. 그래서 내 질문은 : 어떻게 세 번째 setTimeout 함수에서 보조 개체를 조작합니까?

+2

이 $은 ('#이 .SECONDARY 오브젝트') '이없는'것을 의미한다 'doSomething'이라는 이름의 요소. 단지 기본 jQuery 객체입니까, 아니면 메소드'doSomething'을 제공하는 jQuery 플러그인이 있습니까? –

+0

호출은 실제로 d3.select ('# object')를 통해 d3입니다. selectAll ('. 보조') .fadeOut (50); ' – pmain8

+0

코드가 여기에 작성한 것과 다른 것을 말하고 있습니까? 왜?!?! –

답변

1

독자적으로 시간 초과가 발생해서는 안됩니다. 3 일은 1 일후 약 1 초 후에 시작됩니다.

하지만 언급 한 오류가 있습니다. 귀하의 의견을 바탕으로 :

호출은 실제로 D3 그건 d3.select('#object').selectAll('.secondary').fadeOut(50);

를 통해 때문에 D3의 Selections, d3.select().selectAll() 반환, jQuery를 관련이없는 그 방법이되지 않습니다.

.fadeOut()을 사용하기 전에 d3에서 jQuery으로 컬렉션을 변환해야합니다. 당신이 당신의 코드에서 일을 제안했다 싶지만

jQuery(d3.select('#object').selectAll('.secondary')).fadeOut(50); 

하거나, 문을 통해 jQuery를 사용

jQuery('#object .secondary').fadeOut(50); 
0

두 번째 설정은 이전의 두 번째 시간 제한 &입니다. E.G.

animation:function() { 
setTimeout(function() { 
makeObject(…); 
setTimeout(function() { 
    ... 
    setTimeout(function() { 
    $('#object .secondary').doSomething(); 
    },500); 
},500); 
},500); 
}; 
+1

이것이 어떻게 도움이되는지 모르겠습니다. –

+1

답변에 지연 시간이 100,100,100 포함되어 있습니다. 질문의 타이밍과 일치하도록 시간을 업데이트 할 수 있습니까? – pmain8

+0

잘못된 것입니다. 50010001500 대신 500,500,500이어야합니다. –