如何评估链中的代码或假装回调函数?

问题描述:

我我的动态页面上添加图片:如何评估链中的代码或假装回调函数?

<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

使用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()处理的是,代码仍然在任何情况下:)运行一次