2011-04-14 62 views
2

我下面的代碼我有一個UL與x3李的。我希望李的褪色在一個序列中,但我認爲在某個地方放鬆了範圍。問題是隻有序列中的最後一項運行。我最初認爲這是一個循環,所以我刪除了所有這些。任何幫助都會很棒。範圍問題與fadeIn的序列

Thanks is Advance。

function Sequence() { 
    var sequence = []; 
    var pos = 0; 

    Sequence.prototype.add = function(obj) { 
     sequence.push(obj); 
    }; 

    Sequence.prototype.start = function() { 
     sequence[pos].run(); 
    }; 

    Sequence.prototype.next = function() { 
     pos++; 
     sequence[pos].run(); 
    }; 
}; 

function fadeIn(params) { 
    this.id = params.id; 
    this.onComplete = params.onComplete; 

    var self = this; 
    var timer; 
    var i = params.opacity; 

    fadeIn.prototype.run = function(){ 
     timer = setInterval(function() { 
      params.element.style.opacity = i/10; 
      i++; 

      if (i/10 == 1) { 
       clearInterval(timer); 
       self.onComplete(); 
      } 
     }, params.fps); 
    } 
}; 

var sequence = new Sequence(); 
var fader = document.getElementById('fader1'); 
var items = fader.getElementsByTagName("li"); 

sequence.add(new fadeIn({ 
    "id": "instance_0", 
    "element": items[0], 
    "opacity": 0, 
    "fps": 80, 
    "onComplete": function() { 
     sequence.next(); 
    } 
})); 

sequence.add(new fadeIn({ 
    "id": "instance_1", 
    "element": items[1], 
    "opacity": 0, 
    "fps": 80, 
    "onComplete": function() { 
     sequence.next(); 
    } 
})); 

sequence.start(); 
+0

如果在每行代碼的前面添加四個空格,它應該更好地格式化它。 – 2011-04-14 21:17:38

+0

嘿扎克,謝謝你 – iancrowther 2011-04-14 21:32:24

回答

1

是的,這是一個範圍問題。問題是在該行:

fadeIn.prototype.run = function(){ 

當你在prototype定義一個方法,你定義在fadeIn類的所有實例的方法。所以每次你調用構造函數時,你都要用閉包中的新的params來重新定義方法。

的解決方案是定義在this方法(或者,如您已重新命名,self),這是新的實例,而不是類:這裏

self.run = function(){ 

工作例如:http://jsfiddle.net/nrabinowitz/wrQMa/3/

+0

嗨尼克,傑出的迴應。我不僅得到了你的解釋的啓發,我還有一個jsFiddle來看它的行動。非常感謝您花時間。 – iancrowther 2011-04-15 09:36:24