Холст не рисуется html5 (JavaScript, замыкания) - PullRequest
0 голосов
/ 02 марта 2012

Если я уберу «alert (stepHor)»;линия, на моем холсте ничего не будет нарисовано.Но если я отпущу оповещение (stepHor), все пройдет отлично, как и ожидалось.Если бы у меня было что-то подобное, я бы понял, а здесь нет.Это как-то связано с "замыканиями"?Заранее спасибо.

function draw(imageData) {  
    var canvas=document.getElementById('bg'); 
    if(canvas.getContext){ 
        var ctx=canvas.getContext('2d');
        ctx.scale(0.4,0.4);

        var stepHor=Math.floor(imageData.width/imax);
        var stepVer=Math.floor(imageData.height/jmax);
        alert(stepHor);

        for(i=0;i<=imax;i++){
            for(j=0;j<=jmax;j++){   
                var index=(j*stepVer+Math.floor((imageData.height-jmax*stepVer)/2))*(4*imageData.width)+(i*stepHor*4)+Math.floor((imageData.width-imax*stepHor)/2)*4;//the first 'Math.floor' member is to center the image vertically, the second 'Math.floor' member is to center the image horizontally
                var red=imageData.data[index];
                var green=imageData.data[index+1];
                var blue=imageData.data[index+2];
                var alpha=imageData.data[index+3];
                ctx.fillStyle='rgb(' +red+ ',' +green+ ',' +blue+ ')';
                ctx.fillRect(wireWidth*i,wireHeight*j,wireWidth,wireHeight);
            }
        }

    }
}

1 Ответ

2 голосов
/ 02 марта 2012

Перед рисованием на холсте необходимо дождаться инициализации страницы.

Вызвать функцию через body.onload или несколько.

Предупреждение о блокировке дает браузеру достаточно времени для инициализации, если выробот со скоростью реакции 10 мс: -D

...