gpt4 book ai didi

javascript - 无法让 Canvas 元素正确旋转

转载 作者:行者123 更新时间:2023-11-29 22:21:10 24 4
gpt4 key购买 nike

我正在尝试为 Canvas 上的旋转重复图标设置动画,但它没有围绕图像中心旋转。我不确定该怎么做才能让它正常旋转。

setInterval(draw, 30);
var degrees = 0.0;

function draw() {

var canvas = document.getElementById('tutorial');

if (canvas.getContext) {
var ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, 16, 16);
degrees += 0.10;

ctx.save();

ctx.translate(8,8);
ctx.rotate(degrees);

// Draw half open circle
ctx.beginPath();
ctx.lineWidth = 2;
ctx.arc(8, 8, 6, 0, 1.75 * Math.PI);
ctx.stroke();

// Draw arrowhead
ctx.lineWidth = 2;
ctx.moveTo(13, 1);
ctx.lineTo(9, 5);
ctx.lineTo(13, 5);
ctx.lineTo(13, 1);
ctx.stroke();

ctx.restore();
}
}

fiddle :http://jsfiddle.net/xTFkU/

最佳答案

您正在旋转 Canvas 并进行平移,但是绘制然后执行您的绘图功能,就好像 Canvas 没有平移一样。

基本上您需要做的是将 Canvas 平移到您正在绘制的图像的宽度和高度的一半。这将使 0,0 成为图像的中心。然后从所有坐标中减去偏移量。

我所做的是添加一个偏移值,即您的宽度和高度除以 2。然后我将 Canvas 平移该偏移量,并从所有坐标中减去该偏移量。

Working Demo

(function() {

setInterval(draw, 30);
var degrees = 0.0;
var offset = 8;
function draw() {

var canvas = document.getElementById('tutorial');

if (canvas.getContext) {
var ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, 16, 16);
degrees += 0.10;

ctx.save();

ctx.translate(offset, offset);
ctx.rotate(degrees);

// Draw half open circle
ctx.beginPath();
ctx.lineWidth = 2;
ctx.arc(8-offset , 8-offset, 6, 0, 1.75 * Math.PI);
ctx.stroke();

// Draw arrowhead
ctx.lineWidth = 2;
ctx.moveTo(13-offset , 1-offset);
ctx.lineTo(9-offset , 5-offset);
ctx.lineTo(13-offset , 5-offset);
ctx.lineTo(13-offset , 1-offset);
ctx.stroke();

ctx.restore();
}
}
})();​

关于javascript - 无法让 Canvas 元素正确旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12406523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com