可能是一个简单的解决方案之后,但我坚持与它的晚... :)jQuery的:抓住一个图像的宽度增加图像
$j('#thisImage').html('<img src="image.jpg" id="box" />');
var imgWidth = $j('#box').width();
当我做一个console.log(imgWidth)
它返回0
...
我很确定这是因为.html(...)
在调用width(...)
调用之前未完全完成。我已经用缓存的图像进行了测试,它工作正常,并给我正确的图像宽度...但那些没有缓存返回0.
所以我正在寻找一个很好的解决方案,等待.html(...)
电话完成后再继续我的.width(...)
致电
任何帮助,非常感谢。谢谢!
更新1
使用下面CMS的答案... (这可以帮助大家了解我的困境)
如果我这样做:
var imgWidth = 0;
$j('<img src="image.jpg" id="box" />').appendTo("#thisImage").load(function() {
imgWidth = $j('#box').width();
//my first log
console.log("Width 1: " + imgWidth);
});
//my second log
console.log("Width 2: " + imgWidth);
if (imgWidth > 100) {
//do something
}
然后//my second log
作为.load
返回//my first log
之前还没有完成完成...
因此我if
语句总是false
作为imgWidth
总是0
...
即至.load
完成......但随后一切都太迟了......
更新2:看到我所看到
使用瑞安的回答修改...
转到jsbin.com - >包括从下拉菜单“jQuery的” - >在的Javascript标签更换W /下面,然后点击输出选项卡
function loadImg(url, func) {
var img = new Image();
img.onload = func;
img.src = url;
return img;
}
$(document).ready(function() {
var myWidth = 0;
var myImg = loadImg("http://sstatic.net/so/img/logo.png", function() {
myWidth = $(this).width();
$('#hello').append("Show Me First: " + myWidth + "<br />");
});
$(myImg).appendTo("body");
if(myWidth > 0) {
$('#hello').append("Success!");
} else {
$('#hello').append("Show Me Second: " + myWidth + " <- BOO! Out of Order! <br />");
}
});
没有骰子...仍然不能够足够早的渐变宽度...请参阅上面的更新2 – luckykind 2009-11-30 16:21:10
好的...不是我要用于此实例的解决方案,但是您的编辑可帮助我更好地理解该过程并学会如果我将来需要这个技巧...谢谢! – luckykind 2009-11-30 18:02:38