javascript - Firefox .naturalHeight 属性

标签 javascript jquery firefox

我有以下代码:

 var checkImgDim=new Image();
 checkImgDim.src=e.target.result;

 if (input.files[0].size > MAX_SIZE) 
    setError("File too large - max 3MB");

 else if (checkImgDim.naturalHeight < MIN_H ||
          checkImgDim.naturalWidth < MIN_W)
    setError("Image dimensions too small");

它在 Chrome 下工作正常,但在 Firefox 下我得到不一致的结果,因为 naturalHeight 和 naturalWidth 有时返回 0,并且在设置值之前有延迟。我不想将图像加载到 DOM 中或使用 .onload() 代码的全部目的只是检查图像尺寸。我认为在这里添加时间延迟不是一个好的做法。有人可以告诉我检查图像尺寸的正确方法是什么吗?

最佳答案

在加载图像之前无法获取图像大小。无论如何,您应该使用图像的 load 事件。即使图像 URL 实际上是一个数据 URI(例如,如果它来自 FileReader ),它也会异步“加载”到图像对象中。

为此,无需将图像作为 HTML 元素插入到 DOM 中。只需创建一个新的 Image 对象,为其添加一个 load 监听器,然后设置其 src 属性即可。

var image = new Image;

image.onload = function() {
    alert(this.naturalHeight);
};

image.src = 'example.png';

如果图像之前已经下载过,则不会再次下载 - 将使用其缓存副本(只要客户端缓存本身没有通过相应的服务器响应 header 有意禁用)。如果图像 URL 实际上是数据 URI,则根本不需要下载。

请注意,naturalWidthnaturalHeight 属性相对较新,某些浏览器可能不支持它们。因此,使用常规 widthheight 属性目前更可靠,并且只要它们的值之前没有显式更改,它们就具有相同的值。

关于javascript - Firefox .naturalHeight 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37948408/

相关文章:

css - 如何根据协议(protocol)更改 firefox 地址栏的背景颜色?

firefox - 如何测试未签名的 Firefox 扩展?

<Select> 菜单的 javascript onchange 与 onkeyup 事件(上下键不会在 Firefox 中触发 onchange 事件)

javascript - 如何在 Jest 中测试结果的类型是否为 javascript 'function'?

javascript - 过渡不能与 rgba 一起正常工作

javascript - javascript:测试对象的属性长度

javascript - jQuery Masonry 未正确对齐或填充网格中的图像

javascript - 如何在tinymce中的光标位置插入图像

javascript - 获取 "each"内的内部标签元素

javascript - 如何连续放置 3 个 d3.js 图表