HTML5 canvas

基本知识


context是一个封装了很多绘图功能的对象,获取这个对象的方法是  

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

   

canvas元素绘制图像的时候有两种方法,分别是

        context.fill()//填充

        context.stroke()//绘制边框

style:在进行图形绘制前,要设置好绘图的样式

        context.fillStyle//填充的样式

        context.strokeStyle//边框样式  

      context.lineWidth//图形边框宽度

颜色的表示方式:

         直接用颜色名称:"red" "green" "blue"

         十六进制颜色值: "#EEEEFF"

         rgb(1-255,1-255,1-255)

         rgba(1-255,1-255,1-255,透明度)

绘制矩形  context.fillRect(x,y,width,height)  strokeRect(x,y,width,height)


     x:矩形起点横坐标(坐标原点为canvas的左上角,当然确切的来说是原始原点,后面写到变形的时候你就懂了,现在暂时不用关系)

     y:矩形起点纵坐标

     矩形长度

     height:矩形高度

//填充背景
function drawFill(){ context.fillStyle = "red"; context.fillRect(0, 120, 100, 100); }
//填充边框 function drawStroke(){ context.strokeStyle = "blue"; context.strokeRect(120, 120, 100, 100); }

清除矩形区域 context.clearRect(x,y,width,height)


     x:清除矩形起点横坐标

     y:清除矩形起点纵坐标

     清除矩形长度

     height:清除矩形高度

//填充背景
function drawFill(){
     context.fillStyle = "red";
     context.fillRect(0, 0, 100, 100);
}//填充边框
function drawStroke(){
    context.strokeStyle = "blue";
    context.strokeRect(0, 120, 100, 100);
}
//清除画布
function clearCanvas(){
   context.clearRect(50,50,50,170);       
}

 圆弧context.arc(x, y, radius, starAngle,endAngle, anticlockwise)


    x:圆心的x坐标

    y:圆心的y坐标

    straAngle:开始角度

    endAngle:结束角度

    anticlockwise:是否逆时针(true)为逆时针,(false)为顺时针

    ps:经过试验证明书本上ture是顺时针,false是逆时针是错误的,而且无论是逆时针还是顺时针,角度都沿着顺时针扩大,如下图:

路径  context.beginPath()    context.closePath()


    *号为重点

    1、系统默认在绘制第一个路径的开始点为beginPath

    *2、如果画完前面的路径没有重新指定beginPath,那么画第其他路径的时候会将前面最近指定的beginPath后的全部路径重新绘制

    3、每次调用context.fill()的时候会自动把当次绘制的路径的开始点和结束点相连,接着填充封闭的部分

    如果没有closePath那么前面的路径会保留,实验证明正确的结论是 如果没有重新beginPath那么前面的路劲会保留

 绘制线段 context.moveTo(x,y)  context.lineTo(x,y)


    x:x坐标

    y:y坐标

    每次画线都从moveTo的点到lineTo的点,

    如果没有moveTo那么第一次lineTo的效果和moveTo一样,

    每次lineTo后如果没有moveTo,那么下次lineTo的开始点为前一次lineTo的结束点

function draw1(){
        context.fillStyle="red";
        context.beginPath();
        context.moveTo(150,50);
        context.lineTo(100,100);
        context.lineTo(200,100);
        context.closePath();
        context.fill();
    }
    function draw2(){
        context.fillStyle="blue";
        context.beginPath();
        context.moveTo(120,100);
        context.lineTo(80,140);
        context.lineTo(220,140);
        context.lineTo(180,100);
        context.closePath();
        context.fill();
    }

绘制贝塞尔曲线(贝济埃、bezier) context.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y) 

绘制二次样条曲线 context.quadraticCurveTo(qcpx,qcpy,qx,qy)


    cp1x:第一个控制点x坐标

    cp1y:第一个控制点y坐标

    cp2x:第二个控制点x坐标

    cp2y:第二个控制点y坐标

    x:终点x坐标

    y:终点y坐标

 

    qcpx:二次样条曲线控制点x坐标

    qcpy:二次样条曲线控制点y坐标

    qx:二次样条曲线终点x坐标

    qy:二次样条曲线终点y坐标

function way(){
        context.strokeStyle="blue"
        context.beginPath()
        context.moveTo(700,0)
        context.lineTo(800,0)
        context.bezierCurveTo(470,170,750,380,350,550)
        context.lineTo(250,500)
        context.bezierCurveTo(650,380,370,170,700,0)
        context.stroke();

    }
原文地址:https://www.cnblogs.com/Outyua/p/4641730.html