我需要在加载后立即使用JavaScript定位/调整图像大小。为了保持纵横比不变,我必须知道图像的宽度/高度。我可以使用.load
事件,但这样做太晚了,使重新定位可见。相反,我使用以下技术。
var interval = setInterval(function(){
if ($('img').height()) { //This means we have got height.
//Code that uses $('img').height().
clearInterval(interval);
}
},10);
这确保代码在我有图像的宽度/高度信息时以及在它完全加载之前执行。
然而,现在,我需要为一堆图像(特别是在jQuery插件中)执行此操作,问题似乎是第一个clearInterval
调用清除所有间隔,除了第一个{ {1}}未触动过。
我尝试将img
jQuery对象中的区间ID保存为属性($(this)
和数据$(this).interval = setInterval( ...
。
我还尝试首先将id保存在变量中,然后在$(this).data("interval", setInterval( ...
调用的右括号之后将其分配给$(this).data("interval",interval)
。
这样做的正确方法是什么,以便每个间隔都自行清除?
我的代码的完整列表如下
setInterval
答案 0 :(得分:1)
脱离我的头顶:
$t
和$p
不应该是全局变量?即被宣布为
var $t = $(this),
$p = t.parent();
加载图像并等待10毫秒来计算它们的大小的方法在我看来是危险的:它可能会在不同的浏览器中产生不同的结果
更好地预加载图像并在显示之前计算它们的大小:
var img = new Image();
img.src = 'http://your-image-url';
$(img).load(function(){
// here, deal with img.width and img.height
// and then display
});