javascript - 首次加载或使用 ctrl+f5 重新加载时在 Firefox 中的 Canvas 上绘制图像不起作用

标签 javascript firefox canvas

我的问题是,在 Firefox(版本 34)中首次加载文档时,图像未绘制在 Canvas 上。它可以在 IE 中运行。

我创建了一个最小示例页面来说明我的问题。您应该能够通过使用代码创建 HTML 文件、使用任何 png 文件并在 Firefox 中加载该文件来进行重现。宽度和高度是我图片的宽度和高度,用你的图片尺寸即可。

我在 Canvas 之前添加了 img 标签,以便在 javascript 代码执行之前加载图像。但如果我在第一次加载后再次按 F5, Canvas 只会绘制图像。按 Ctrl+F5,图像就消失了。 F5 再次返回...您明白了。如果缓存被清空,绘图将无法工作。

有谁知道我是否可以在 Firefox 中阻止这种情况(因为它在 IE 中工作,没有测试 chrome)?我是否忽略了绘画前应该做的事情?
也许我做错了什么?

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <img src="ball.png"/>
    <canvas id="canvas" height="100" width="100"></canvas>
    <script>
        var canvas = document.getElementById("canvas"), context = canvas.getContext("2d");
        var internal_image = new Image();
        internal_image.src = "ball.png";
        internal_image.width = 18;
        internal_image.height = 19;
        context.drawImage(internal_image, 10, 10);
    </script>
</body>

这只是一个用于说明的文件示例。实际上我正在使用jquery并且代码在

中执行

$(document).ready

函数。

最佳答案

尝试在图像的 load 函数中调用 drawImage 函数,以确保图像在尝试绘制之前已实际加载。

var canvas = document.getElementById("canvas"), context = canvas.getContext("2d");
var internal_image = new Image();
internal_image.src = "ball.png";
internal_image.width = 18;
internal_image.height = 19;

internal_image.addEventListener("load", function() {
  context.drawImage(internal_image, 10, 10);
}, false);

关于javascript - 首次加载或使用 ctrl+f5 重新加载时在 Firefox 中的 Canvas 上绘制图像不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27334856/

相关文章:

javascript - 如何从选定的表格行中获取最小和最大数量?

javascript - 如何将数据传递到 Ant Design Modal

CSS 大纲无法在 Firefox 中正确呈现

javascript - 如何在 Chrome 中控制 Canvas fillText() 的字体字距?

c# - 在 WPF 中找不到附加属性

javascript - 无法显示 Canvas 对象

javascript - D3.js 和弦图 - 使和弦接触拉开的弧线

javascript - 如何检查一个 DateTime 是否晚于 javascript 中的另一个

css - 是否有用于 IE9 浏览器的 CSS 'transform'?

Firefox:当 iframe 高度超过页面高度时,iframe 打印中断