参考代码
/** @type {HTMLCanvasElement} */
let canvas = document.querySelector("#canvs");
let ctx = canvas.getContext("2d")
let img = new Image();
img.src = "img/h.png";
window.onload = function() {
ctx.drawImage(img, 108, 101)
}
网上说因为img加载问题,ctx.drawImage需要使用.complete === true和.onload确定何时准备就绪。
但是有三个疑问:
1.canvas创建和赋值是同步代码,执行到下一行就已经完成,ctx.drawImage所考虑的img的加载是指什么?(对于创建变量,执行js程序,这个加载是啥?)
2.既然用window.onload可以为什么canvas.onload不可以?
3.如果说canvas.onload不可以是因为canvas加载(展示到页面中)时img还没加载,而window.onload是在img加载后执行的,那为什么下面的代码是可行的?此时img才创建,对于ctx.drawImage不就没有加载的机会?
window.onload = function() {
let img = new Image();
img.src = "img/h.png";
ctx.drawImage(img, 108, 101)
}//该情况可行。
小白勿喷,十分乐意接受简洁直接或深入底层的讲解,感谢解答!
补充:
已经通过网友宝贵意见,明确了标准写法:(不过,上述问题仍然存在!)
/** @type {HTMLCanvasElement} */
let canvas = document.querySelector("#canvs");
let ctx = canvas.getContext("2d")
let img = new Image();
img.src = "img/h.png";
img.onload = function() {
ctx.drawImage(img, 108, 101)
}
所谓巧妇难为无米之炊,你让孩子去买米,总要等他把米带回来,你才能淘米下锅吧。
你让二哈帮你去买。二哈:汪汪汪?
而且这可能与浏览器的实现有关,换一个浏览器品牌或者换一个浏览器版本可能就画不出来了。