Цитата:
LittlePony, как же вы такие большие коды лепите, если не понимаете, что происходит :) Давай мы поступим следующим образом, ты выложишь небольшой рабочий пример, который тебе не ясен. пробуй так
paradiseBoom: function(){
var self = this;
var $happiness = $(self.el).children("li")
var animateDuration = self.animateDuration
var animateDelay = self.animateDelay
function AddActiveMarker(index){
var $cHappiness = $happiness.eq(index)
if($cHappiness.size()==1){
$("#eden").show()
switch(index){
case 0:
$("#tree")
.css({opacity:0,display:"block"})
.animate({opacity:1},{duration:animateDuration})
break
case 1:
$("#mrpostman")
.css({opacity:0,display:"block"})
.animate({opacity:1},{duration:animateDuration})
break
case 2:
$("#bench")
.css({opacity:0,display:"block"})
.animate({opacity:1},{duration:animateDuration})
break
}
$("<span class=activemarker />")
.css({opacity:0})
.appendTo($cHappiness).animate({opacity:1},{duration:animateDuration,complete:function(){
if(self.state=="boom") setTimeout(function(){AddActiveMarker(index+1)},animateDelay)
}})
}
}
AddActiveMarker(0,self);
}
признаться, долго тупил, пытаясь понять, что происходит. melky, прав. Ситуация следующая (как я понял): первый раз ты вызываешь метод paradiseBoom так: paradise.paradiseBoom. Здесь все нормально, this там правильный. Когда у тебя происходит это setTimeout(function(){AddActiveMarker(index+1,obj) },animateDelay), то this там window. Хотя это роли не играет :D p.s.: это все на ночь глядя, так что на истину не претендую :) |
Цитата:
var Paradise = {
state: "inactive",
paradiseLost: function() {
function AddActiveMarker( index, obj ) {
alert( obj.state );
}
AddActiveMarker( 0, this );
}
};
Paradise.paradiseLost();
твой пример рабочий. Ищи ошибку в другом месте, например, логике и/или таймаутах. |
| Часовой пояс GMT +3, время: 01:47. |