canvasArray
分割された画像が含まれています。ブラウザで開くと、<canvas>
要素はテーブルに表示されるはずです。たとえば、3x3
初めてページを開くと、空のテーブルが画面に表示されます(問題)。もう一度クリックすると、<canvas>
要素が正しく表示されます。おそらく、キャッシュされているためです。
なぜ彼らは初めて表示されないのですか?ctx.drawImage(img,xoffset,yoffset);
コード内でonload
イベント内と外で2回使用してみました。
画像がループの外で正しく描画されない場合は、onload
イベントが発生すると再試行されますが、再試行されません。
Image URL<input type="text" id="image" value="images/hippo.jpg"/><br>
var canvasArray = Project.split( $("#image").val() , rowCount * rowCount);
// eg Project.split("https://image.com/funny.jpg, 3, 3");
var Project = {
split: function(imgsrc, tiles) {
var img = new Image(),
canvasArray = new Array(),
imgWidth,
imgHeight,
r,g,b = 0;
img.onload = function(){
xoffset = 0,
offset = 0;
for (var i = 0; i < tiles; i++){
//create canvas element and set attributes and get the canvas context
canvasArray[i] = document.createElement('canvas');
canvasArray[i].setAttribute('width', tileW);
canvasArray[i].setAttribute('height', tileH);
canvasArray[i].setAttribute('id', 'canvas'+i);
var ctx = canvasArray[i].getContext('2d');
ctx.drawImage(img,xoffset,yoffset);
//if i is a multiple of the total number of tiles to a row,
//move down a column and reset the row_col
if((i + 1) % row_col == 0){
yoffset -= tileH;
xoffset =0;
}else{
//otherwise move across the image
xoffset -= tileW;
}
}
};
img.src = imgsrc;
//get the number of tiles in a row or column (row == column )
var row_col = Math.sqrt(tiles),
tileH = img.height / row_col,
tileW = img.width / row_col,
canvasArray = [tiles];
var xoffset = 0,
yoffset = 0;
for (var i = 0; i < tiles; i++){
//create canvas element and set attributes and get the canvas context
canvasArray[i] = document.createElement('canvas');
canvasArray[i].setAttribute('width', tileW);
canvasArray[i].setAttribute('height', tileH);
canvasArray[i].setAttribute('id', 'canvas'+i);
var ctx = canvasArray[i].getContext('2d');
ctx.drawImage(img,xoffset,yoffset);
//if i is a multiple of the total number of tiles to a row,
//move down a column and reset the row_col
if((i + 1) % row_col == 0){
yoffset -= tileH;
xoffset =0;
}else{
//otherwise move across the image
xoffset -= tileW;
}
}
return canvasArray;
}};