美文网首页
canvas基础第一节

canvas基础第一节

作者: 空谷悠 | 来源:发表于2016-12-24 16:06 被阅读91次

    一、基础介绍和画直线

    大多数现代浏览器都是支持Canvas的,比如 Firefox, safari, chrome, opera的最近版本以及IE9都支持.IE8及以下不支持HTML5,但是我们可以进行提示用户更新到最新的版本。

    在进行图形绘制时,我们是通过context绘图环境进行操作。context是canvas的核心。context字面意思是上下文,我们可以把它理解为绘图的助手,用于存储操作步骤。

    Canvas坐标系:X轴:横向向右为正方向。Y轴:竖向向下为正方向。

    <canvas  id="myCanvas"  width="500"  height="500">你的浏览器不支持canvas,请使用高版本的浏览器。</canvas>

    //获取canvas画布对象

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

    //创建上下文

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

    //画线

    //创建一个图层

    context.beginPath();

    //移动画笔到指定位置

    context.moveTo(0,0);

    //画笔画到什么位置

    context.lineTo(200,200);

    context.lineTo(20,360);

    //设置线条的颜色

    context.strokeStyle="blueviolet";

    //设置线条的粗细

    context.lineWidth=10;

    //设置线条的线帽,端点样式

    //lineCap用于设置线条两端的形状

    //butt(default) 默认,没有帽

    //round 圆头

    //square 方头,加上会增加一个线帽,长度是线条宽度的一半

    context.lineCap="round";

    //渲染,画图

    context.stroke();

    你画我猜的小练习

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

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

    canvas.onmousedown=function(event) {

    var   ev=event||window.event;

    var    x=ev.clientX-canvas.offsetLeft;

    var   y=ev.clientY-canvas.offsetTop;

    console.log(x, y)

    context.beginPath();

    context.moveTo(x, y)

    canvas.onmousemove=function(event) {

    var      ev=event||window.event;

    var       Left=ev.clientX-canvas.offsetLeft;

    var        Top=ev.clientY-canvas.offsetTop;

    context.lineTo(Left, Top);

    context.stroke();

    }

    document.onmouseup=function() {

    canvas.onmousemove=null;

    }

    }


    二、封闭图形

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

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

    context.beginPath();

    context.moveTo(50,50);

    context.lineTo(50,150);

    context.lineTo(150,150);

    //context.lineTo(50, 50);

    //封闭图形

    context.closePath();

    //填充颜色

    context.fillStyle="#6767BB";

    //线的颜色

    context.strokeStyle="#56FFCC";

    //线的宽

    context.lineWidth=5;

    //渲染面

    context.fill();

    //渲染线,如果把context.stroke去掉,就没有边了,相当于线没有渲染

    context.stroke();


    三、画矩形的简单方式

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

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

    context.beginPath();

    //以线来画矩形,四个参数(x起点,y起点,矩形的宽,矩形的高),不需要渲染

    context.strokeRect(50,50,200,200);

    //画填充的矩形,四个参数(x起点,y起点,矩形的宽,矩形的高),不需要渲染

    context.fillRect(50,50,200,200);


    四、画圆

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

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

    context.beginPath();

    //第一个参数:圆心的x坐标

    //第二个参数:圆心的y坐标

    //第三个参数:半径

    //第四个参数:开始画圆的开始角度

    //第五个参数:结束的角度

    //第六个参数:画圆的方向(顺时针false、逆时针true)

    context.arc(200,200,180,0, Math.PI*2,true); 


    五、渐变色

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

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

    context.beginPath();

    context.arc(200,200,180,0, Math.PI*2,true);

    //createLinearGradient(x, y, x1, y1) - 创建线条渐变

    //第一个参数:开始渐变的x坐标,

    //第二个参数:开始渐变的y坐标,

    //第三个参数:结束渐变的x坐标

    //第四个参数:结束渐变的y坐标

    //createRadialGradient(x, y, r, x1, y1, r1) - 创建一个径向 / 圆渐变

    var   gradient=context.createLinearGradient(0,0,400,400);

    //addColorStop()方法指定颜色停止, 参数使用坐标来描述, 可以是0至1

    gradient.addColorStop(0,"red");

    gradient.addColorStop(0.5,"yellow");

    gradient.addColorStop(1,"green");

    //addColorStop()可以添加无数个

    //渲染

    context.fillStyle=gradient;

    context.lineWidth=10;

    context.strokeStyle="deeppink"

    context.stroke();

    context.fill();


    六、绘制文字

    //strokeText(text,x,y) - 在 canvas 上绘制空心的文本

    //fillText(text,x,y) - 在 canvas 上绘制实心的文本

    //三个参数,第一个参数:文字内容.第二个参数:开始绘制文字的x坐标.第三个参数:开始绘制文字的y坐标

    //font - 定义字体

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

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

    context.beginPath();

    //改变字体颜色

    context.strokeStyle="orangered";

    context.font="italic 50px Arial";//斜体 字体大小 字体样式

    context.strokeText("hello  world",100,100);//空心文本

    context.fillStyle="red";

    context.fillText("hello   world",100,300);//实心文本


    七、绘制阴影

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

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

    context.beginPath();

    //阴影的右偏移量(如果是负值就是左偏移量)

    context.shadowOffsetX=10;

    //阴影的下偏移量(如果是负值就是上偏移量)

    context.shadowOffsetY=10;

    //设置阴影颜色

    context.shadowColor="blue";

    //设置阴影的模糊程度,值越来越模糊

    context.shadowBlur=10;

    context.arc(200,200,100,0, Math.PI*2);

    context.fillStyle="red";

    context.fill();


    八、平移

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

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

    context.beginPath();

    context.fillStyle="red";

    //平移,平移的是画布的坐标系,想要产生效果需要先平移再画,

    context.translate(100,100);

    context.fillRect(0,50,100,100);


    九、旋转

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

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

    context.beginPath();

    context.fillStyle="#7B68EE";

    //是坐标系从原点旋转,旋转的是坐标系,正值顺时针旋转,负值逆时针旋转

    context.rotate(Math.PI/4);

    context.fillRect(200,0,50,50);


    十、缩放

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

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

    context.beginPath();

    context.fillStyle="#7B68EE";

    //缩放:第一个值是x轴缩放的比例,第二个值是y轴缩放的比例

    //缩放的是坐标系

    context.scale(2,0.5);//x轴整体坐标放大两倍,y轴整体缩小0.5倍

    context.fillRect(50,0,50,50);


    十一、储存和释放状态

    context.save()储存状态,存储绘制状态

    context.restore()释放状态,获取之前的画布状态

    这两个是成对出现的,调用context.restore()之后将返回在context.save()这个节点时的canvas的所有的状态。这是保持canvas绘图状态的方法。在save和restore之间可以随意更改canvas的状态,而不会影响后续的绘制效果。当涉及到图形变换(平移,旋转,缩放)的时候,记得要先save,变换结束之后restore,以保证canvas图形绘制的正确。

    如果有多个存档,是倒着取的


    十二、二次曲线和三次曲线(贝塞尔曲线)

    quadraticCurveTo(cpx,cpy,dx,dy);创建一条表示二次曲线的路径.(二次曲线其实就是二次方函数形成的曲线)。有四个参数。

    //第一个参数:控制点的x坐标

    //第二个参数:控制点的y坐标

    //第三个参数:结束点的x坐标

    //第四个参数:结束点的y坐标

    控制点,决定曲线的形状。结束点代表终点。

    bezierCurveTo(cpx,cpy,cpx2,cpx2,dx,dy);创建一条表示贝塞尔曲线的路径.该函数接受六个参数:

    //第一二个参数是第一个控制点的x,y坐标

    //第三四个参数是第二个控制点的x,y坐标

    //第五六个参数是曲线结束的坐标

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

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

    context.beginPath();

    //二次曲线

    context.moveTo(0,0);//起点

    context.quadraticCurveTo(400,0,400,400);

    context.stroke();

    //三次曲线

    context.moveTo(0,0);//起点

    context.bezierCurveTo(400,0,400,100,400,400)

    context.stroke();


    十三、变换矩阵

    //transform(a,b,c,d,e,f)

    //a,d水平、垂直缩放

    //b,c水平、垂直倾斜(可以取负值,负值的方向就是相对正值相反的方向)

    //e,f水平、垂直位移

    //默认是transform(1, 0, 0, 1, 0, 0)

    //注意:使用transform设置变换矩阵是在之前的变换的基础上进行变换设置的,也就是说transform设置的变换矩阵具有集联的关系,

    //setTransform(a,b,c,d,e,f)就是忽略之前的设置,将会让之前所有的设置失效,只使用当前的setTransform中传入的变换矩阵

    context.fillStyle="red";

    context.strokeStyle="#058";

    context.lineWidth=5;

    context.save();

    context.transform(2,0.2,0.2,1.5,50,100);

    context.fillRect(50,50,300,300);

    context.strokeRect(50,50,300,300);

    context.restore();


    相关文章

      网友评论

          本文标题:canvas基础第一节

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