2010-06-30 45 views
0

我我的動態頁面上添加圖片:如何評估鏈中的代碼或假裝回調函數?

<div class="simple_overlay" id="overlay"> 
    <img src="" /> 
</div> 

<script type="text/javascript"> 
$(function() { 
    $("a[rel]").overlay({ 
     var source = this.getTrigger().attr('href'); 
     this.getOverlay().find("img").attr({'src': source}); 
    }); 
}); 
</script> 

現在,我需要獲得新的圖像的寬度和計算margin-left與之相對應。原生jQuery工具方法不起作用,因爲當加載疊加時,圖像尚未加載並且容器的寬度爲0. 是否有任何選項可以模擬此鏈上的回調,因此我可以在attr()評估之後使用width()

+0

如何搭售行爲的形象,並且使其工作與它的$(this).parent()'加載? – 2010-06-30 08:39:23

+0

@Evadne Wu:在這種情況下,圖片會在邊距變化時「跳躍」。這對用戶不利。 – vtambourine 2010-06-30 08:58:26

+1

動畫變化?製作圖像'display:none'或'visibility:hidden'直到腳本明確顯示? – 2010-06-30 09:47:28

回答

0

使用load event(不要與window.load混淆)的圖像,像這樣:

$("a[rel]").overlay({ 
    var source = this.getTrigger().attr('href'); 
    this.getOverlay().find("img").one('load', function() { 
     //run your code here, the image is loaded and is "this" 
    }).each(function() { 
     if (this.complete) $(this).load(); //trigger load, handles from cache cases 
    }).attr({'src': source}); 
}); 

這使用.one()只運行一次你的代碼。 load事件觸發時,圖像加載...但這並不總是火災時從緩存(取決於瀏覽器)加載它,這是.each()是什麼。如果瀏覽器從緩存中加載觸發事件......也沒什麼太大的.one()處理的是,代碼仍然在任何情況下:)運行一次