美文网首页
第9章 canvas绘图

第9章 canvas绘图

作者: yangsg | 来源:发表于2019-05-06 11:13 被阅读0次

在HTML5的新规范中,提供了canvas标记和相关的API可以在网页上进行绘图操作。与之前绘图方式相比,
canvas绘图的优势

  • 不借助于第三方的插件和工具
  • 不借助于服务器,在客户端完成绘制

canvas绘图的劣势

  • 描绘动画效果时,效率不高

<canvas>标记可以理解是一个画布,通过操作下面的这些API完成绘制工作

1. 绘制方式

坐标系
canvas默认左上角是坐标原点(0,0),向右延伸为x轴的正向,向下延伸为y轴的正向。


理解坐标系

在canvas中绘制方式主要两种

  • fill 填充式
  • stroke 描边式
2. 绘制线

使用stroke方法

ctx.strokeStyle = "#2BD62D"; 
ctx.lineWidth = 5;
ctx.moveTo(100,100); //线的起点
ctx.lineTo(300,100); //线的终点
ctx.stroke(); //绘制
3. 绘制矩形

fillRect(起点坐标x,起点坐标y,长,宽)

ctx.fillStyle = "#33CCFF"; //设置填充颜色
ctx.fillRect(0,0,800,600); //绘制矩形,从(0,0)位置,绘制800x600的矩形
ctx.strokeStyle = "#33CCFF"; //设置描边颜色
ctx.lineWidth = 5; //边框的粗细
ctx.strokeRect(0,0,800,600); //绘制矩形,从(0,0)位置,绘制800x600的矩形
4. 绘制圆形/圆弧

arc(圆心坐标x,圆心坐标y,半径,开始角度,结束角度,是否为逆时针绘制);
角度:360度=2*PI;

//绘制圆形
ctx.beginPath();
ctx.fillStyle = "#FF8533"; 
ctx.arc(500,300,200,0,Math.PI/2,false);//圆心坐标(500,300),半径是200,顺时针的0-90度的圆
ctx.fill();
ctx.closePath();
5. 绘制扇形

ctx.beginPath()和closePath()之间可以完成闭合操作,设置落笔点为圆心,在最终圆弧闭合时会与圆心产生连线,形成扇形。

ctx.beginPath();
ctx.fillStyle = "#FF8533"; 
ctx.moveTo(200,300); //设置落笔点为圆心
ctx.arc(200,300,200,0,Math.PI/2,false);
ctx.fill();
ctx.closePath();
6. 绘制渐变色

canvas支持两种方式的渐变色设置

  • 线性渐变
var x = ctx.createLinearGradient(开始坐标x, 开始坐标y, 结束坐标x, 结束坐标y);

沿着线的方向,产生渐变

通过

x.addColorStop(0,"#FFFFFF");

设置渐变细节,第一参数的取值范围[0,1],其中0表示开始位置的颜色,1表示结束位置的颜色

  • 径向渐变
var x = ctx.createRadialGradient(开始圆心坐标x,开始圆心坐标y,开始半径,结束圆心坐标x,结束圆心坐标y,结束半径);

也需要使用

x.addColorStop(0,"#FFFFFF");

设置渐变细节

制作一个圆心发散效果圆

<canvas id="can1" width="600" height="400"></canvas>
<script type="text/javascript">
    window.onload = function (){
        var c = document.getElementById("can1");
        var ctx = c.getContext("2d");
        ctx.fillStyle = "#66CCFF";
        ctx.fillRect(0,0,600,400);
        
        var x = ctx.createRadialGradient(300,200,50,300,200,150);
        x.addColorStop(0,"#FFFFFF");
        x.addColorStop(0.85,"#FFFF66");
        x.addColorStop(1,"#FFFF00");
        
        
        ctx.beginPath();
        ctx.fillStyle = x;
        ctx.arc(300,200,150,0,Math.PI*2,true);
        ctx.fill();
        ctx.closePath();
        
    }
</script>
7. 绘制动画

动画片的原理由多张连续的静止图片组成,快速连续播放时形成动画效果。
canvas动画的原理是一致的,利用setInterval方法每隔一段时间重新绘制图像,间隔很短时就会形成动画效果。

相关文章

网友评论

      本文标题:第9章 canvas绘图

      本文链接:https://www.haomeiwen.com/subject/ombloqtx.html