Если Image.complete равно false
, то загрузка все еще продолжается. Нет необходимости пытаться перезагрузить изображение. Вы можете просто проверить complete
еще раз в следующем кадре,
ПРЕДУПРЕЖДЕНИЕ Image.complete
будет true
после завершения загрузки, но это не означает, что изображение доступно для рендеринга, поскольку любые ошибки при загрузке будут complete
процесс загрузки изображения.
В идеале вы должны прослушивать события Image (load
и / или error
), чтобы вы могли быть уверены, что оно может быть отображено.
Альтернатива семафор, указывающий, что изображение готово к рендерингу, также будет намного лучше, чем использование Image.complete
семафора
requestAnimationFrame(renderLoop);
var canRenderImage; // undefined
const img = new Image;
img.src = "??????";
img.addEventListener("load", () => canRenderImage = true, {once: true});
img.addEventListener("error", () => canRenderImage = false, {once: true});
function renderLoop() {
if (canRenderImage) { // is it safe to render the image
ctx.drawImage(img, 0, 0);
} else if (canRenderImage === false) {
...
// what ever the plan is when there is missing content
...
} // else image is not complete try again next frame
... code
requestAnimationFrame(renderLoop);
}