我有一個模擬平鋪圖像的畫布元素表。我只需要填充視口中當前可見的那些圖塊。這裏是我使用的代碼將圖像加載到多個畫布時出現問題
for (var ix = visibleRange.firstX; ix <= visibleRange.lastX; ix++) {
for (var iy = visibleRange.firstY; iy <= visibleRange.lastY; iy++) {
var canvasDispJq = $("canvas#" + frameResId + "-" + ix + "-" + iy + "- disp");
var canvasDisp = canvasDispJq.get(0);
var image = new Image();
var context = canvasDisp.getContext("2d");
image.onload = function() {
context.drawImage(image, 0, 0);
}
image.src = self.baseURL + '/' + canvasDispJq.attr("id");
}
}
};
但問題是隻加載了該範圍的最後一個圖塊。同樣的事情,但以這種方式實現的是工作的罰款:在可見光範圍內是如何計算不應該的問題,因爲我在Firebug檢查,兩種方法的瓷磚呈現
$("table#canvasTable-" + frameResId + " canvas.display").each(function() {
var canvasDispJq = $(this);
if ((canvasDispJq.position().top + self.tileSize + imagePosition.y) > 0 &&
(canvasDispJq.position().left + self.tileSize + imagePosition.x) > 0 &&
(canvasDispJq.position().top + imagePosition.y) < self.containerHeight &&
(canvasDispJq.position().left + imagePosition.x) < self.containerWidth) {
var canvasDisp = canvasDispJq.get(0);
var image = new Image();
var context = canvasRaw.getContext("2d");
image.onload = function() {
context.drawImage(image, 0, 0);
}
image.src = self.baseURL + '/' + canvasDispJq.attr("id");
}
});
差異的正確選擇和實際平鋪圖像是從服務器下載的,但是對於第一種方法,只顯示最後一個圖塊,而對於第二個圖塊,所有圖塊都被正確渲染。
在此先感謝您的任何建議。
更多upvotes for Maksym! ;) –