javascript - 在 Canvas 中绘制完整尺寸的图像仅在 Mozilla Firefox 中第二次尝试时有效

标签 javascript html firefox canvas filereader

我正在尝试从用户那里获取图像并在其中绘制内容。但我在 MF 中遇到奇怪的行为,只在 Canvas 中显示完整尺寸的图像。 我有以下代码:

<!DOCTYPE html>
<html>
 <body>
  <input type="file" id="input">
  <div id="main"></div>
  <script>
   document.getElementById('input').onchange = function() {
    var file_reader = new FileReader();
    file_reader.onload = function() {
     var img = new Image();
     img.src = file_reader.result;

     var canvas = document.createElement('canvas');
     canvas.width = img.width;
     canvas.height = img.height;

     var ctx = canvas.getContext('2d');
     ctx.drawImage(img, 0, 0, img.width, img.height)

     document.getElementById('main').appendChild(canvas)
    }
    file_reader.readAsDataURL(document.getElementById('input').files[0])
   }
  </script>
 </body>
</html>

在 Chrome 和 Opera 中一切正常,但在 Mozilla Firefox 中,当我选择图像时没有任何反应,添加的 Canvas 宽度为 0,高度为 0。然后,如果我再次重新选择它,它将显示出来,因此对于每个图像,我必须选择它一次,没有任何反应,然后在第二次、第三次等次时一切正常。
为什么会发生这种情况?

最佳答案

我会尝试在 img.onload 回调中在 Canvas 上绘制图像。

关于javascript - 在 Canvas 中绘制完整尺寸的图像仅在 Mozilla Firefox 中第二次尝试时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28901554/

相关文章:

javascript - html、javascript 和 css 中的列表框

javascript - 有没有地方可以测试代码是否符合 ES5/安全?

html - 如何将我的 HTML 文件链接到我的 CSS 文件

html - 在我的案例中如何为元素设置边距

angular - 使用 karma 在 headless 模式下启动 Firefox

firefox - 如何在 lte Firefox 2 的内联 block 范围内居中文本?

javascript - 如何在 JavaScript 正则表达式中连接字符串?

html - 多个背景图像位置

flash - 如何制作具有透明背景的 Flash 影片

javascript - 当await表达式是concat()的参数时,为什么async/await有不同的输出?