canvas绘制文本 圆弧 详解

canvas绘制文本
strokeText()绘制的是空心的文本,fillText设置的是实心的文本

< script >
    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );

    ctx . font = "30px  微软雅黑 " ;
    ctx . strokeStyle = "hotpink" ;
    ctx . strokeText ( "Hello Javascript!" , 50 , 50 );

    ctx . fillStyle = "red" ;
    ctx . fillText ( "Javascript 是世界上最好的语言 " , 50 , 200 );

//    ctx.beginPath();
    ctx . strokeStyle = "blue" ;
    ctx . strokeText ( "Hello Javascript!" , 50 , 300 );
</ script >

绘制文字的对其方式:
textAlign:start(左对齐) end(右对齐) center(居中对齐)
示例demo:

< script >
    //textAlign :设置文本的水平对齐方式 i
    // 默认值: start--->left 左对齐
    //      end--->right 右对齐
    //      center :居中对齐

    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );

    ctx . moveTo ( 300 , 0 );
    ctx . lineTo ( 300 , 600 );
    ctx . stroke ();

    ctx . textAlign = "center" ;
    ctx . font = "30px  微软雅黑 " ;
    ctx . strokeStyle = "hotpink" ;
    ctx . strokeText ( "Hello Javascript!" , 300 , 50 );
</ script >

measureText()方法获取绘制的文本的宽度;
示例demo:

< script >
    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );

    // 在计算文本宽度的时候,会自动判定当前状态下设置的字体大小
    var  obj=ctx . measureText ( "Hello Javascript!" );
    console . log ( obj . width ); // 获取文本的宽度
</ script >

绘制文本的垂直对其方式:
textBaseline属性,取值为top hanging middle baseline bottom,默认为基线对其

< script >
    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );

    // 绘制水平的参考线:
    ctx . moveTo ( 0 , 50 );
    ctx . lineTo ( 800 , 50 );
    ctx . stroke ();

    ctx . textBaseline = "middle" ;
    ctx . font = "30px  微软雅黑 " ;
    ctx . strokeStyle = "hotpink" ;
    ctx . strokeText ( "Hello Javascript!" , 300 , 50 );

//    ctx.strokeText(" 我是中国人,我爱我的祖国 ",300,50);
</ script >

< script >
    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );

    // 绘制水平的参考线:
    ctx . moveTo ( 0 , 50 );
    ctx . lineTo ( 800 , 50 );
    ctx . stroke ();

    ctx . textBaseline = "hanging" ;
    ctx . font = "30px  微软雅黑 " ;
    ctx . strokeStyle = "hotpink" ;
//    ctx.strokeText("Hello Javascript!",300,50);

    ctx . strokeText ( " 我是中国人,我爱我的祖国 " , 300 , 50 );
</ script >

< script >
    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );

    // 绘制水平的参考线:
    ctx . moveTo ( 0 , 50 );
    ctx . lineTo ( 800 , 50 );
    ctx . stroke ();

    ctx . textBaseline = "bottom" ;
//    ctx.textBaseline="top";
    ctx . font = "30px  微软雅黑 " ;
    ctx . strokeStyle = "hotpink" ;
//    ctx.strokeText("Hello Javascript!",300,50);

    ctx . strokeText ( " 我是中国人,我爱我的祖国 " , 300 , 50 );
</ script >


绘制圆弧
1. arc(圆心 x,圆心 y,半径,开始弧度,结束弧度 ,是否以逆时针方式绘制 )
2. 整个圆是 2*Math.PI的, 0的位置位于圆心水平往右拉直线, Math.PI/2就位于圆心的正下方
3. 默认的绘制方式是:顺时针,可以通过 arc方法的底 6个参数传递值为 true表示逆时针方式绘制

利用arc方法绘制圆弧,接收六个参数
示例demo:
< script >
    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );
    ctx . arc ( 300 , 300 , 150 , - 0.7 * Math . PI , 0.5 * Math . PI );
    ctx . stroke ();
</ script >

< script >
    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );

    // 弧度的值:圆弧上的点
    // 规定:从圆心往右接触到的这个点对应的弧度值为: 0
    // 从弧度为 0 的位置开始顺时针旋转,弧度的值越来越大
    //      60 度: -->PI/3
    //        90 度: -->PI/2
    //       180 度: -->PI
    //       270 度: 1.5PI
    //      360 度: 2PI

    // 从弧度为 0 的位置开始逆时针旋转,弧度的值越来越小


    // 弧度差:形成的夹角对应的弧度
</ script >
绘制圆弧的demo:
< script >
    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );

    ctx . arc ( 300 , 300 , 150 , 0.7 * Math . PI , 1.3 * Math . PI );
    ctx . stroke ();

    ctx . beginPath ();
    ctx . arc ( 400 , 300 , 150 , 1.3 * Math . PI , 0.7 * Math . PI , true );
    ctx . stroke ();
</ script >

绘制实心的圆弧:
< script >
    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );
    ctx . moveTo ( 300 , 300 );
    ctx . arc ( 300 , 300 , 150 , 0 , Math . PI / 3 );
    ctx . fill ();
</ script >

圆动画:demo
< script >
    var  canvas =  document . getElementById ( "canvas" );
    var  ctx = canvas . getContext ( "2d" );

    var  endRadian=- 0.4 * Math . PI ;
    var  timer= setInterval ( function (){
        ctx . clearRect ( 0 , 0 , canvas . width , canvas . height );

        ctx . beginPath ();
        ctx . moveTo ( 300 , 300 );
        ctx . arc ( 300 , 300 , 150 , - 0.5 * Math . PI , endRadian );

        ctx . fill ();

        // 清除定时器:
        if ( endRadian>= 1.5 * Math . PI ){
            clearInterval ( timer );
        }
        console . log ( "stop" );
        endRadian+= 0.01 * Math . PI ;
    }, 20 )
</ script >

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITzhongzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值