我在畫布上繪製和旋轉圖像時遇到問題。基本上,我的方法是創造一個幸運之輪,它允許基於陣列形式的獎品進行定製。這個數組中的數據根據索引的數量組成了車輪內的部分。如何在HTML5畫布中繪製和旋轉圖像以及文本
數據非常簡單。它僅僅是這樣
var prizes = [
{product:"Axe FX", img: "https://mdn.mozillademos.org/files/5395/backdrop.png"},
{product:"Musicman JPX", img: "https://mdn.mozillademos.org/files/5395/backdrop.png"},
{product:"Ibanez JEM777V", img: "https://mdn.mozillademos.org/files/5395/backdrop.png"}
];
該數據被用於創建車輪內的段的簡單JSON對象。所以我想放置當前正在爲我工作的文本。
繪製輪子時,我分爲兩個主要功能。一個繪製輪子,另一個繪製輪子內的分段。
var drawPartial = function(key, lastAngle, angle) {
var value = prizes[key].product;
ctx.save();
ctx.beginPath();
ctx.lineWidth = 6;
ctx.fillStyle = segColors[key];
ctx.moveTo(centerX, centerY);
ctx.arc(centerX, centerY, size, lastAngle, angle);
ctx.lineTo(centerX, centerY);
ctx.closePath();
ctx.stroke();
ctx.fill();
ctx.save();
ctx.translate(centerX, centerY);
ctx.rotate((lastAngle+angle)/2);
ctx.fillStyle = "#000";
ctx.fillText(value.substr(0,20), size/2 + 20, 0);
ctx.restore();
ctx.restore();
}
var draw = function() {
var len = prizes.length;
var currentAngle = outCurrentAngle;
var lastAngle = currentAngle;
ctx.strokeStyle = '#000000';
ctx.textBaseline = "middle";
ctx.textAlign = "center";
ctx.font = "1.4em Arial";
for(var i = 1; i <= len; i++) {
var angle = (Math.PI*2) * (i/len) + currentAngle;
drawPartial(i-1, lastAngle, angle);
lastAngle = angle;
}
ctx.beginPath();
ctx.lineWidth = 2;
ctx.fillStyle = "#fff";
ctx.moveTo(centerX, centerY);
ctx.arc(centerX, centerY, size/7, 0, Math.PI*2);
ctx.closePath();
// ctx.stroke();
ctx.fill();
ctx.beginPath();
ctx.lineWidth = 10;
ctx.arc(centerX, centerY, size, 0, Math.PI*2);
ctx.closePath();
// ctx.stroke();
}
隨着上面的代碼,我只是簡單地調用draw()函數,輪子和所有的段將相應地創建。但是,我想在每個細分市場中繪製圖像,但我不知道如何使其工作。這是drawPartial()的修改渲染圖像與文字
var drawPartial = function(key, lastAngle, angle) {
var value = prizes[key].product;
var img = new Image();
img.src = prizes[key].img;
img.onload = function() {
ctx.save();
ctx.drawImage(img,centerX,centerY);
ctx.save();
ctx.translate(centerX,centerY);
ctx.rotate((lastAngle+angle)/2);
ctx.drawImage(img,centerX,centerY);
ctx.restore();
ctx.restore();
}
ctx.save();
ctx.beginPath();
ctx.lineWidth = 6;
ctx.fillStyle = segColors[key];
ctx.moveTo(centerX, centerY);
ctx.arc(centerX, centerY, size, lastAngle, angle);
ctx.lineTo(centerX, centerY);
ctx.closePath();
ctx.stroke();
ctx.fill();
ctx.save();
ctx.translate(centerX, centerY);
ctx.rotate((lastAngle+angle)/2);
ctx.fillStyle = "#000";
ctx.fillText(value.substr(0,20), size/2 + 20, 0);
ctx.restore();
ctx.restore();
}
沿着你可以看到,我根據獎品的對象,它應當在正選賽稱爲每次迭代被稱爲添加圖片和它的SRC()功能,但它永遠不會呈現任何細分中的任何圖像。
我想要的是。在drawPartial()的每次迭代中,我希望將圖像與文本一起放置在段中,並根據角度旋轉。
請幫助...