【问题标题】:Circle is not connecting through lines properly using CanvasCircle没有使用Canvas正确连接线
【发布时间】:2020-03-02 09:30:23
【问题描述】:

我正在尝试创建 11 个圆圈,它们通过线与中间圆圈连接。我正在尝试画圆圈。在这里我做了一些研发,但我无法制作线条。请帮我完成这个。

 var canvas, ctx;
        var circlePoints = [];
        function createCanvasPainting() {
            
            canvas = document.getElementById('myCanvas');
            if (!canvas || !canvas.getContext) {
                return false;
            }
            canvas.width = 600;
            canvas.height = 600;
            ctx = canvas.getContext('2d');           
            ctx.strokeStyle = '#B8D9FE';
            ctx.fillStyle = '#B8D9FE';
            ctx.translate(300, 250);
            ctx.arc(0, 0, 50, 0, Math.PI * 2); //center circle
            ctx.stroke();
            ctx.fill();
            var angleRotate = 0;
            for (var i=0; i<11; i++) {
                if (i > 0) {
                    angleRotate += 32.72;
                }
                lineToAngle(ctx, 0, 0, 200, angleRotate);
            }
        }

        function lineToAngle(ctx, x1, y1, length, angle) {

            angle *= Math.PI / 180;

            var x2 = x1 + length * Math.cos(angle),
            y2 = y1 + length * Math.sin(angle);
            ctx.beginPath();
            ctx.moveTo(x1, y1);
            ctx.lineTo(x2, y2);
            ctx.lineWidth = 1;
            ctx.arc(x2, y2, 40, 0, Math.PI * 2);
            ctx.fill();
            ctx.stroke();

            circlePoints.push({x: x2, y: y2});
            // console.log(circlePoints);
        }

        createCanvasPainting();
&lt;canvas id="myCanvas"&gt;&lt;/canvas&gt;

Here is my JSFiddle Link

【问题讨论】:

  • 我没有得到这部分! “我正在尝试画圆圈。在这里我做了一些研发,但我无法画线”。
  • @Manjuboyz,如果你运行代码 sn-p 你可以看到连接到圆圈的线条是粗体的。
  • 正确,所以你需要粗线还是细线?
  • 嗨@Manjuboyz,lineWidth 不工作。

标签: javascript html canvas html5-canvas


【解决方案1】:

见下文,我从您的代码中删除了所有“噪音”。
只是用线连接中间圆圈的圆圈。

canvas = document.getElementById('myCanvas');
canvas.width = canvas.height = 200;
ctx = canvas.getContext('2d');
ctx.lineWidth = 1;
ctx.translate(99, 99);
angle = 0;

function draw() {
  ctx.clearRect(-99, -99, 200, 200);
  ctx.beginPath();
  ctx.arc(0, 0, 35 + Math.cos(angle / 3000), 0, Math.PI * 2);
  ctx.stroke();
  ctx.fill();

  for (var i = 0; i < 11; i++) {
    a = angle * Math.PI / 180;
    x = 80 * Math.cos(a)
    y = 80 * Math.sin(a)
    ctx.beginPath();
    ctx.arc(x, y, 18, 0, Math.PI * 2);
    ctx.moveTo(x, y);
    ctx.lineTo(0, 0);
    ctx.fill();
    ctx.stroke();
    angle += 32.7;
  }
}

setInterval(draw, 10);
&lt;canvas id="myCanvas"&gt;&lt;/canvas&gt;

【讨论】:

  • 嗨@Helder Sepulveda,你太棒了。得到了我正在寻找的解决方案。但我不需要轮换。我需要当用户点击外部圈子时,它会重定向到新标签中的任何外部链接。你能帮我解决这个问题吗?提前致谢。 :)
  • 这是一个有趣的转折,现在你需要跟踪画布上的点击事件并在点击一个圆圈时采取行动,我感觉这不是要求的结束,也许你应该使用像 fabricjs.com 这样的库
  • ...并且旋转很容易禁用,即使用setInterval 调用绘图函数进行动画处理,只需调用一次即可完成旋转
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 2021-08-23
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多