javascript - 通过更改 src 来更改 Canvas 图像

标签 javascript

我尝试通过更改 image.src 来更改图像。 但这不起作用。当它在 setInterval() 函数中使用时,它可以工作。 我要 不知道为什么(?)。

var imgE=new Image(); 
imgE.src="Ship.png";
window.onload=init;

function init () {
ctx=document.getElementById("can1").getContext("2d");
draw();
//setInterval(draw,100);
butE=document.getElementsByTagName("button");
butE[0].onclick=change;
butE[1].onclick=getback; 
}

function draw() {
  ctx.clearRect(0,0,800,500);
  ctx.drawImage(imgE,100,100,100,100);
}
function change() {
  imgE.src="Ship_d.png";
  draw();
}
function getback() {
  imgE.src="Ship.png";
  draw();
}

我听说过“使用前预加载图像”。但我不太清楚。 无论如何,下面写的有效。那为什么他们不需要预载呢? (原谅我的无知)

var imgE=new Image();
imgE.src="Ship.png";
var imgdE=new Image(); 
imgdE.src="Ship_d.png";
window.onload=init;

function init () {
ctx=document.getElementById("can1").getContext("2d");
draw(1);
butE=document.getElementsByTagName("button");
butE[0].onclick=change;
butE[1].onclick=getback; 
}

function draw(no) {
ctx.clearRect(0,0,800,500);
  if (no==1) {
    ctx.drawImage(imgE,100,100,100,100);
  }
  else ctx.drawImage(imgdE,100,100,100,100);
}
function change() {
draw(2);
}
function getback() {

绘制(1); }

最佳答案

很有可能是因为图片加载不及时。

要么在使用之前预加载所需的图像,要么需要使用

imgE.src = "Ship_d.png";
imgE.onload = draw;

关于javascript - 通过更改 src 来更改 Canvas 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21640086/

相关文章:

javascript - 如果显示 n/a 值则隐藏 DIV

javascript - 如何检查和打印不一致的时间戳 react ?

javascript - 如何在js中创建按日期分组的json?

javascript - 在两个 jQuery 对象上调用相同的函数

javascript - 规范中的 "LexicalEnvironment"和 "VariableEnvironment"有什么区别

javascript - d3.js 条形图中旋转的 x 轴标签被 chop

javascript - D3.js:使用 d3.nest() 动态添加键

javascript - 使用 Jest 和 React 模拟非默认函数

javascript - jquery.click(调用方法)

javascript - RxJS 运算符在完成之前不会再次发送到内部可观察对象