javascript - 获取图像宽度的最早事件

标签 javascript jquery css jquery-events

我有一些 JavaScript 来居中图像和 <object>如果它们超过阈值宽度,则在页面上显示 s。它还会检查是否尚未手动应用某些类。

$('img,object').bind('load', function() {
    w = $(this).width();

    if (w > 400 && !( $(this).hasClass('inlineimage') | $(this).parent().hasClass('inlineimage') ))
        $(this).css('margin', '10px ' + (parseInt((800-w)/2)-30) +'px');
});

虽然很恐怖,但是这背后的意义本来是很理智的。 CMS 不容易指定对齐方式,开发它以允许这样做会占用其他工作的大量时间。客户端 hack 有效。

唯一的问题是 JS 会等待整个图像加载完毕。显然,这意味着在较慢的网络上,页面加载,图像开始加载,一段时间后图像卡入到位。丑。

但是浏览器似乎在开始下载 图像时就知道图像的宽度。我真的很想加入这个事件并指出这个视觉错误。

当然,如果有一种 CSS 方法可以解决这个问题,我也愿意接受。

最佳答案

在支持它的浏览器中,您可以轮询自然维度:

var interval = setInterval( function() {
    if( img.naturalWidth ) {
        clearInterval(interval);
        console.log( "Natural available: "+ (new Date - now );
        console.log( img.naturalWidth, img.naturalHeight );
    }
}, 0 );

在演示中here在未缓存的图像上,我得到:

Natural available: 782
62 71 
Loaded: 827 

因此,实际尺寸在加载事件发生前 50 毫秒可用。不幸的是,在 IE 中,就绪状态 “loading” 不能保证实际尺寸。

在每次测试之前更改图像的查询字符串以确保未缓存。

这是关于自然维度的 whatwg 链接:http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#dom-img-naturalwidth

关于javascript - 获取图像宽度的最早事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11883306/

相关文章:

html - 如何将数字放在 span 标签的中心

css - 如何更改换行文本 -css 的颜色和对齐方式

javascript - 如何获取仅包含存在于任何字符和空格之间的大写字母的字符串

JQuery 比较选择的同级值

javascript - 使用 package.json 脚本运行另一个 package.json 脚本

javascript - 输入 JavaScript 后修改字符或单词

javascript - 简单的 jQuery 效果不起作用

css - 使文本 block 具有与页面页脚相同的垂直空间

Javascript/Jquery 技术 : paginate fixed-size textarea with overflow:hidden

javascript - jquery 检查事件和 css 动画