百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>html5教程> 对于canvas线条的属性-
分享文章到:

对于canvas线条的属性-

发布时间:09/01 来源:未知 浏览: 关键词:
这篇文章主要介绍了canvas线条的属性详解的相干材料,小编觉得挺不错的,此刻分享给大家,也给大家做个参照 。一起追随小编过来看看吧 这篇文章主要介绍了canvas线条的属性详解的相干材料,小编觉得挺不错的,此刻分享给大家,也给大家做个参照 。一起追随小编过来看看吧

一、线条的帽子lineCap

取值:butt(默许值),round圆头,square方头

var canvas=document.getElementById("canvas");

canvas.width=800;
canvas.height=800;

var context=canvas.getContext("2d");

context.lineWidth=40;
context.strokeStyle="#005588";

//三个beginpath()画了3条平行线
context.beginPath();
context.moveTo(100,200);
context.lineTo(700,200);
context.lineCap="butt";
context.stroke();

context.beginPath();
context.moveTo(100,400);
context.lineTo(700,400);
context.lineCap="round";
context.stroke();

context.beginPath();
context.moveTo(100,600);
context.lineTo(700,600);
context.lineCap="square";
context.stroke();

//baseline
context.lineWidth=1;
context.strokeStyle="#27a";
context.moveTo(100,100);
context.lineTo(100,700);
context.moveTo(700,100);
context.lineTo(700,700);
context.stroke();

lineCap="square"可以用来在线段闭适时候完全闭合,但是还是举荐运用clothPath()闭合。

var canvas=document.getElementById("canvas");

canvas.width=800;
canvas.height=800;

var context=canvas.getContext("2d");

context.beginPath();
context.moveTo(100, 350);
context.lineTo(500,350);
context.lineTo(500,200);
context.lineTo(700,400);
context.lineTo(500,600);
context.lineTo(500,450);
context.lineTo(100,450);
context.lineTo(100,350);
// context.closePath(); //举荐

context.lineWidth=10;
context.lineCap="square"; //不举荐
context.fillStyle="yellow";
context.strokeStyle="#058"

context.fill();
context.stroke();

二、画一个五角星,注明线条其它状态属性

圆上的五个角平分360°,每个角72°,90°-72°=18°

小圆上的角平分72°,18°+36°=54°

角度转弧度——弧度=角度*π/180 即(18+i*72)*Math.PI/180

var canvas=document.getElementById("canvas");

canvas.width=800;
canvas.height=800;

var context=canvas.getContext("2d");
context.beginPath();
//角度转弧度:除以180*PI
for(var i=0;i<5;i++){
    context.lineTo(Math.cos((18+i*72)/180*Math.PI)*300+400,
        -Math.sin((18+i*72)/180*Math.PI)*300+400);
    context.lineTo(Math.cos((54+i*72)/180*Math.PI)*150+400,
        -Math.sin((54+i*72)/180*Math.PI)*150+400);
}

context.closePath();

context.lineWidth=10;
context.stroke();

封装成函数:

window.onload=function(){
    var canvas=document.getElementById("canvas");

    canvas.width=800;
    canvas.height=800;

    var context=canvas.getContext("2d");
    context.lineWidth=10;
    drawStar(context,150,300,400,400)
}        

function drawStar(ctx,r,R,x,y,){
    ctx.beginPath();
    //角度转弧度:除以180*PI
    for(var i=0;i<5;i++){
        ctx.lineTo(Math.cos((18+i*72)/180*Math.PI)*R+x,
            -Math.sin((18+i*72)/180*Math.PI)*R+y);
            ctx.lineTo(Math.cos((54+i*72)/180*Math.PI)*r+x,
            -Math.sin((54+i*72)/180*Math.PI)*r+y);
    }

    ctx.closePath();
    ctx.stroke();
}

离别修改小r=80,200,400得到下面图形

添加一个顺时针扭转的参数:rot

window.onload=function(){
    var canvas=document.getElementById("canvas");

    canvas.width=800;
    canvas.height=800;

    var context=canvas.getContext("2d");
    context.lineWidth=10;
    drawStar(context,150,300,400,400,30);
}        




//rot顺时针扭转的角度
function drawStar(ctx,r,R,x,y,rot){
    ctx.beginPath();
    //角度转弧度:除以180*PI
    for(var i=0;i<5;i++){
        ctx.lineTo(Math.cos((18+i*72-rot)/180*Math.PI)*R+x,
            -Math.sin((18+i*72-rot)/180*Math.PI)*R+y);
            ctx.lineTo(Math.cos((54+i*72-rot)/180*Math.PI)*r+x,
            -Math.sin((54+i*72-rot)/180*Math.PI)*r+y);
    }

    ctx.closePath();
    ctx.stroke();
}

扭转30度的结果如下:

2、miter相干miterLimit的属性

设定小r为30,lineJoin为miter,结果如下:角没有延长成尖角,而是采取bevel的方式来显示。

context.lineJoin="miter";
drawStar(context,30,300,400,400,30);

为何?

由于context.miterLimit=10默许值是10,

miterlimit只要当lineJoin为miter时才会有效。

miterLimit指的是,当运用miter作为线条和线条相接的方式时,所 发生的内角和外角的距离的最大值

默许值是10就代表最大值是10px,一旦超过来10px就会运用bevel的方式显示。

上面把内圆半径r设定为30时,构成的尖角非常尖,内角和外角的距离超过来miterLimit的10,

此刻把miterlimit改大点,改成20,结果如下:

context.lineJoin="miter";
 context.miterLimit=20;
 drawStar(context,30,300,400,400,30);

当发生miterLimit时一定是线条有宽度的,有宽度的线条中间的线的尖角与外边尖角直接的距离。

canvas给出一个miterLimit的经验值10。只要在极其特殊的状况下,需要体现非常尖利的角的时候才需要修改miterLimit。

以上就是本文的全部内容,但愿对大家的学习有所帮忙,更多相干内容请关注百分百源码网!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板