HTML Canvas - Dotted stroke around circle

前端 未结 5 1876
陌清茗
陌清茗 2021-01-02 17:06

I do know there is no native support for doing dotted stroke lines rendered on a canvas, but I have seen the clever ways people have been able to generate support for this.<

5条回答
  •  既然无缘
    2021-01-02 17:42

    Live Demo

    calcPointsCirc takes 4 arguments, the center x/y, the radius, and the length of the dashes. It returns an array of points, x,y,ex,ey. You can just loop through the points to draw the dashed circle. There's probably much more elegant ways to do this but figured Id give it a shot.

    function calcPointsCirc( cx,cy, rad, dashLength)
    {
        var n = rad/dashLength,
            alpha = Math.PI * 2 / n,
            pointObj = {},
            points = [],
            i = -1;
    
        while( i < n )
        {
            var theta = alpha * i,
                theta2 = alpha * (i+1);
    
            points.push({x : (Math.cos(theta) * rad) + cx, y : (Math.sin(theta) * rad) + cy, ex : (Math.cos(theta2) * rad) + cx, ey : (Math.sin(theta2) * rad) + cy});
            i+=2;
        }              
        return points;            
    } 
    
    
    var canvas = document.getElementById('canvas'),
        ctx = canvas.getContext('2d');
    
    canvas.width = canvas.height= 200;
    
    var pointArray= calcPointsCirc(50,50,50, 1);
        ctx.strokeStyle = "rgb(255,0,0)";
        ctx.beginPath();
    
        for(p = 0; p < pointArray.length; p++){
            ctx.moveTo(pointArray[p].x, pointArray[p].y);
            ctx.lineTo(pointArray[p].ex, pointArray[p].ey);
            ctx.stroke();
        }
    
        ctx.closePath();
    

提交回复
热议问题