操作由前一个setTimeout函数创建的setTimeout函数中的对象

时间:2014-07-10 20:40:07

标签: javascript

我有一个使用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);

}

我正在第一个setTimeout函数中创建一个与'.secondary'CSL类关联的对象,然后我尝试选择该对象并使用第三个函数中的类名对其进行操作。但是,在第三个函数执行后,对象保持不变,并且我收到错误“Undefined is not a function”。我认为这是因为setTimeouts同时执行,因此第三个函数尚不存在辅助对象。所以我的问题是:如何从第三个setTimeout函数中操作辅助对象?

2 个答案:

答案 0 :(得分:1)

自身的超时不应成为问题。第3名将在1日后大约1秒钟开始。

但是,你提到的错误是。根据您的评论:

  

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

实际调用d3

这是因为D3 Selectionsd3.select().selectAll()返回,与jQuery没有关系,并且没有得到它方法

在使用d3之前,您必须将集合从jQuery转换为.fadeOut()

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

或者,在整个声明中使用jQuery,正如您建议在您的代码段中做的那样:

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

答案 1 :(得分:0)

如何在前一次设置第二次和第三次超时? E.G。

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