绘制到HTML5 Canvas的图像在首次加载时无法正确显示

Jar*_*rek 10 javascript html5 canvas

我正在关注在HTML5画布上导入和显示图像的教程.一切正常,直到我尝试改变图像本身.例如,我将有一个黄色圆圈作为我的图像,脚本工作正常.但是如果我在Paint中打开图像本身并将圆圈更改为红色并刷新页面,则直到我再次手动点击或再次刷新时,圆圈才会显示.这是我正在使用的代码片段:

var topMap = new Image();
topMap.src = "topMap.png";

function drawMap() {
    context.clearRect(0, 0, WIDTH, HEIGHT);
    context.drawImage(topMap, 0, 0);
}

function init() {
    drawMap();
}

init();
Run Code Online (Sandbox Code Playgroud)

Sim*_*ris 18

圆圈可能没有显示,因为您在加载图像之前绘制它.将您的上一个陈述更改为:

// Lets not init until the image is actually done loading
topMap.onload = function() {
  init();
}
Run Code Online (Sandbox Code Playgroud)

点击刷新后它工作的原因是因为图像现在已预先加载到缓存中.

您总是希望在尝试绘制图像之前等待加载任何图像,否则画布上不会显示任何图像.

  • 更简单地说,`topMap.onload = drawMap;`.注意[你应该设置`onload` _before_你设置'src`](http://stackoverflow.com/questions/4776670/should-setting-an-image-src-to-dataurl-be-available-immediately) .所以:`var topMap = new Image; topMap.onload = drawMap; topMap.src = "topMap.png";` (6认同)