我跑进在Chrome和Safari的问题使用jQuery做用图像的带的宽度一些计算。
当使用我的计算中:
$(document).ready(function() {
/* some calculations with $("img").width() */
});
一切工作在IE6 +和Firefox就好了,但是它在Chrome和Safari不:$(IMG).WIDTH()为0的图像是否已被高速缓存。
使用:
$(window).load(function() {
/* some calculations with $("img").width() */
});
它工作在上述所有浏览器,但问题是当所有图像都完全加载它只是开始。
是WebKit的行为预期的行为,或者是有一些的WebKit / jQuery的错误造成的图像性能不会成为DOM的一部分吗?
如果是用的webkit / jQuery的一个问题:有没有办法解决它,让我的脚本来执行比,上述方案早?
顺便说一句,我不使用的图像尺寸的任何内嵌性能。
尝试在你的img标签指定大小:
<img src="myimg.jpg" alt="" width="300" height="200" />
这个快速谷歌搜索: http://www.websiteoptimization.com/speed/tweak/size/
什么我推断是因为图像不加载,直到图像已加载的WebKit将简单地返回0为“未知”的大小。 特别说明的大小可能会解决这个问题。
我觉得这更是黑客十岁上下的方式,但它似乎(从我测试)工作:
function callback(){
var el = $(this);
// if this element was processed or width is 0 (for webkit), then skip
if(el.data('loaded') || el.width() === 0)
return;
el.data('loaded', 1); // marked this element as "processed"
// do whatever you want to do with el.width()
console.log(el.width());
}
$(function(){
// Non-webkit-based browsers will call callback() here
// otherwise, after each image loads, the callback will execute
// (for webkit browsers), when the size will be correct.
$('img').load(callback).each(callback);
})
WebKit的浏览器仍然会比其他浏览器稍微慢一些,因为它的每个图像加载完毕后,但它不是等待所有加载图像更快。
我不卸载任务,应在服务器上处理客户端的粉丝。
真正的解决方案是,当它被添加到数据库,然后用宽度和高度正确地产生所述<img>标签将其发送到客户端之前的属性来计算所述图像的大小。
相比,在第一位置其上传到数据库的过程中的初始计算(并从事后数据库拉动值)发生的任何开销将是微不足道 - 不要在后面提到的它的每个后续检索。
其结果是一个语义上有意义的HTML标签,在你关心的所有浏览器使用jQuery的作品,为什么避免呢?
我发现指定的图像尺寸时使用.load()动态加载的图像的这种方式中,我使用的图像加载功能与一个回调
loadImage: function(src, callback){
$("<img alt="" />").attr("src", src).load(callback);
}
然后我可以使用IMG-元件(其报告正确的尺寸)设置回调内部的IMG-属性
$(this).attr({
id: img,
width: this.width,
height: this.height
});
现在我可以得到适当的widht和高度使用,例如,
var contentWidth = $("#img").attr("width");
文章来源: Are image properties part of the DOM (jQuery - webkit inconsistency with other browsers)?