2010-03-06 141 views
1

我嘗試使用下面的代碼,以使圖像淡出,並只有時,它的淡出,改變它的來源,然後使其再次淡入:jQuery的回調函數不起作用

$('.liitem').click(function() { 
$('#imagen').fadeOut('slow', function() { 
    var rutaimagen = $(this).find('a').attr("href"); 
    $('#imagen').attr("src",rutaimagen).load(function(){  
    $('#imagen').fadeIn('slow'); 
    }); 
}); 
return false; 
}); 

...但它不工作!我嘗試刪除fadeOut中的回調函數,然後它可以正常工作,但您可以看到新圖像突然替換之前的圖像(因爲它在fadeOut效果完成之前加載),然後淡出,然後再次進入:

$('.liitem').click(function() { 
$('#imagen').fadeOut('slow'); 
    var rutaimagen = $(this).find('a').attr("href"); 
    $('#imagen').attr("src",rutaimagen).load(function(){  
    $('#imagen').fadeIn('slow'); 
    }); 
return false; 
}); 

顯然我更喜歡第一個片段的工作版本。

你可以看到,我使用的觸發淡入效果只有當新的圖像加載,這是合乎邏輯的情況下,新的圖像是非常大的,需要更多的時間的函數。我不介意它在加載時保持白色,我可以實現一個加載器.gif。但是我不知道這個.load(function(){});正在干擾整個事情。

回答

3

有一件事我注意到,你的兩個例子之間的不同:

$(this).find('a').attr("href"); 

在第一階段,「本」是#imagen,在第二個「本」是.liitem。這與它有什麼關係?

+0

謝謝。你指出我正確的方向。事實上,我意識到我的問題有點愚蠢。這是我的代碼,它完美的工作。 – Alextronic 2010-03-06 21:13:30

0

謝謝darkporter。這是我現在的代碼,它的工作原理:

$('.liitem').click(function() { 
    var liitem = $(this); 
$('#imagen').fadeOut('slow', function() { 
    var rutaimagen = liitem.find('a').attr("href"); 
    $('#imagen').attr("src",rutaimagen).load(function(){ 
    $('#imagen').fadeIn('slow'); 
    }); 
}); 
return false; 
}); 
+0

不錯。這是舊的「'var self = this'」技巧來保存舊的「this」。 – jpsimons 2010-03-07 20:54:59

+0

感謝Darkporter。我一直沒有使用jQuery。我對這些可能性感到驚訝! – Alextronic 2010-03-08 13:54:57