线条属性

1.lineCap

意思是线条的帽子,有butt(默认),square,round三种样式,接下来看一看效果:
1
代码为:

<body>
    <canvas id="canvas" width="800" height="600">no canvas</canvas>
    <script type="text/javascript">
        var canvas = document.getElementById("canvas");
        var cxt = canvas.getContext("2d");

        cxt.lineWidth = 30;
        cxt.strokeStyle = "#ccc";

        cxt.beginPath();
        cxt.lineTo(100,100);
        cxt.lineTo(300,100);
        cxt.lineCap = "butt";
        cxt.stroke();

        cxt.beginPath();
        cxt.lineTo(100,150);
        cxt.lineTo(300,150);
        cxt.lineCap = "round";
        cxt.stroke();

        cxt.beginPath();
        cxt.lineTo(100,200);
        cxt.lineTo(300,200);
        cxt.lineCap = "square";
        cxt.stroke();

        //画两竖线好区分
        cxt.beginPath();
        cxt.lineWidth = 2;
        cxt.strokeStyle = "#000";
        cxt.lineTo(100,80);
        cxt.lineTo(100,220);
        cxt.stroke();

        cxt.beginPath();
        cxt.lineTo(300,80);
        cxt.lineTo(300,220);
        cxt.stroke();
    </script>
</body>

注意:
此属性只能用于线段的开始和结尾,不能用在中间,用在中间也无效,比如:

        cxt.lineWidth = 30;
        cxt.strokeStyle = "#ccc";

        cxt.beginPath();
        cxt.lineTo(100,100);
        cxt.lineTo(300,100);
        cxt.lineTo(300,300);
        cxt.lineCap = "round";
        cxt.stroke();

2

2.lineJoin

意思是线条交汇处,有miter(默认),bevel,round三种样式:
我们画一个五角星来解释:
首先画一个五角星:
3
代码:

        cxt.lineWidth = 10;
        cxt.strokeStyle = "#000";

        drawStar(cxt,50,100,400,400,0);
        /*
        r,R:小圆和大圆半径
        x,y:中心坐标
        rot:旋转角度
        */
        function drawStar(cxt,r,R,x,y,rot){
            cxt.beginPath();
            for(var i=0;i<5;i++){
                cxt.lineTo(Math.cos((18 + i*72 - rot)/180*Math.PI)*R+x,-Math.sin((18+i*72-rot)/180*Math.PI)*R+y);
                cxt.lineTo(Math.cos((54 + i*72 - rot)/180*Math.PI)*r+x,-Math.sin((54+i*72-rot)/180*Math.PI)*r+y);
            }
            cxt.closePath();
            cxt.stroke();
        }

4

现在我们看看lineJoin属性的效果:

bevel:8 round:9

然后我们改变小圆的半径,变得尖锐

drawStar(cxt,30,100,400,400,0);

5

我们继续减小:drawStar(cxt,10,100,400,400,0);,却变成了这样:6,不再尖了。
这时候需要介绍另外一个属性:miterLimit

3.miterLimit

但在这之前,我们要了解一下miter的计算方式:

7

我们加上这条属性,只有在lineJoin为miter时才有用:

cxt.miterLimit = 20;

10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值