У меня проблема с рисованием на холст, у меня есть массив информации об изображении, через которую я просматриваю и создаю объекты изображения. На каждом событии onload изображения я рисую его на холст, однако это будет работать только после обновления (как только изображения будут в кеше, похоже,).HTML 5 холст DrawImage работает только после обновления
Вот отрывок из моего кода
var image = new Image();
image.src = img.src; //got from elsewhere, need to draw a background image first
image.onload = function() {
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
img.parentNode.replaceChild(canvas, img);
var context = canvas.getContext('2d');
context.drawImage(image, 0, 0, canvas.width, canvas.height);
context.globalCompositeOperation = 'source-over';
//looping through my image info
for (var index in anaglyphs){
var anaglyph = anaglyphs[index];
if (anaglyph === undefined) continue;
//If x, y, height and width values are set in Image then set in mask
//otherwise use defaults
var x = 0;
if (anaglyph.x !== undefined) x = anaglyph.x;
var y = 0;
if (anaglyph.y !== undefined) y = anaglyph.y;
var width = canvas.width;
if (anaglyph.width !== undefined) width = anaglyph.width;
var height = canvas.height;
if (anaglyph.height !== undefined) height = anaglyph.height;
var alpha = new Image();
//Use of an intimidate function to stop javascripts closure
//overriding the variables before the onload event fired. Creating
//temporary variables in the intimidate function, which executes
//immediately, and storing the desired values inside them for callback.
(function(){
var xPos = x;
var yPos = y;
var maskWidth = width;
var maskHeight = height;
alpha.onload = function() {
context.drawImage(this, xPos, yPos, maskHeight, maskWidth);
};
})();
alpha.src = "data:"+anaglyph.content+";base64,"+encode64(anaglyph.data);
}
};
После обновления он работает нормально, и он будет продолжать работать нормально, если я открыть веб-страницу, используя этот сценарий еще раз, однако он не сможет снова, если я очистить кеш и снова открыть страницу. Он должен работать только в последней версии Firefox.
Благодаря
Эй, я использовал замыкание в попытке иметь образы рисовать, когда возвращается OnLoad событие, мне нужно было х , y, высота и ширина, которые были перезаписаны при перемещении петли. Но ваше решение было лучше, однако та же проблема все еще произошло, мне удалось это исправить, добавив «Код» SetTimeout (функция() {обратного вызова (изображения)}, 100) «Код» Я думаю, что это было проблема с рендерингом firefox, потому что это исправлено. Cheers – user1956149