【发布时间】:2018-09-02 23:54:16
【问题描述】:
- 我想在画布上显示图像(动态地)然后重置它。
- drawImage() 是在其源加载后在画布上绘制图像的函数。
-
resetCanvas() 是重置/清理画布的函数。
var canvas = document.getElementById("Canvas"); const ctx = canvas.getContext("2d"); drawImage("img/earth.jpg"); resetCanvas(); //more code function resetCanvas() { ctx.clearRect(0, 0, canvas.width, canvas.height); } function drawImage(source) { var img = new Image(); img.onload = function() { var x = img.width; var y = img.height; adjustCanvasSize(x, y); ctx.drawImage(img,0,0, x, y); } img.src = source; }
当我执行此代码时,resetCanvas() 被“忽略”。我不想在 drawImage() 的 onload 函数中插入 resetCanvas(),因为它实际上代表了许多其他不同的函数和将要执行的指令在 drawImage() 之后,它看起来会出错。
我在想是否有办法让 javascript 更有耐心并阻止它执行任何操作,直到图像被加载到 drawImage 函数中。
【问题讨论】:
-
and it would look wrong.实际上,这听起来像是完美的解决方案,对我来说听起来不错。如果你有很多图片需要在重置之前先加载,那么使用 Promises 和Promise.all -
你可以有一个变量 boolean 叫做: var imageLoaded = false;然后在加载图像时将其设置为 true,但由于图像加载是在另一个线程上发生的,因此您可以处于一个 while 循环中,该循环不断检查 imageLoaded 是否为 true,并且在此之前它不会继续。
-
我的解决方案可能不受欢迎,但它是实现您想要的一种方式
标签: javascript canvas onload onload-event