• 【HTML】canvas学习小结


    1. 绘制基本图形

    -----上下文----------------------------------------------------------

    canvas.getContext('2d') 获取上下文

    ctx.save()  保存当前上下文

    ctx.restore()  恢复至上次保存的上下文

    -----路径 ----------------------------------------------------------

    ctx.beginPath()  开始绘制新路径

    ctx.closePath()  结束当前路径

    ctx.moveTo(x,y)  移动绘制点至x,y

    ctx.lineTo(x,y)  从当前点绘制到x,y的线

    ------样式-------------------------------------------------------------

    ctx.fillStyle  设置图形填充的颜色

    ctx.strokeStyle   设置图形边框的颜色

    -----线条样式 -----------------------------------------------------------

    ctx.lineWidth  设置图形边框的宽度

    ctx.lineCap  线条末端样式,可为round / butt / sqare

    ctx.lineJoin  两条线交汇边角的类型,可为bevel|round|miter

    ctx.lineLimit  两线夹角长度,只有当 lineJoin 属性为 "miter" 时,miterLimit 才有效。

    -----填充&绘制---------------------------------------------------------- 

    ctx.fill()  填充图形

    ctx.stroke()  绘制图形,一般填充在绘制前面,避免填充遮挡宽度

    -----转换---------------------------------------------------------- 

    ctx.translate(x,y)  将图形起始坐标移至x,y  

    ctx.rotate(angle)  将图形旋转angle角度(弧度制)

    ctx.scale(x,y)  将图形X轴缩放x倍,Y轴缩放y倍

    ctx.transform(a,b,c,d,e,f)  将图形进行矩阵变换,a,b水平缩放、倾斜,c,d垂直倾斜、缩放,e,f水平、垂直移动图形,矩阵变换可叠加

    ctx.setTransform(a,b,c,d,e,f)  将图形变换矩阵重置为指定矩阵

    1.1 绘制线条

        var canvas = document.getElementById('demo');
        canvas.width = 800;
        canvas.height = 800;
        var ctx = canvas.getContext('2d');
    
        ctx.beginPath();
        ctx.moveTo(100,100);
        ctx.lineTo(200,200);
        ctx.lineTo(100,300);
        ctx.lineWidth = 15;
        ctx.lineCap = "round";
        ctx.strokeStyle = "#CC0000"; // 设置线的颜色
        ctx.lineJoin = "miter"; //两条线交汇边角的类型,可为bevel|round|miter
        ctx.lineLimit = 15;//两条线交汇处内角和外角之间的距离,只有当 lineJoin 属性为 "miter" 时,miterLimit 才有效。
    
        ctx.closePath();
        ctx.stroke();

    1.2 绘制矩形

    ctx.rect(x1, y1, x2, y2);  绘制左上角坐标x1,y1 右下角坐标x2,y2的矩形

    ctx.fillRect(x1, y1, x2, y2);  绘制左上角坐标x1,y1 右下角坐标x2,y2的填充矩形

    ctx.strokeRect(x1, y1, x2, y2);  绘制左上角坐标x1,y1 右下角坐标x2,y2的无填充矩形

    ctx.clearRect(x1, y1, x2, y2);  清楚左上角坐标x1,y1 右下角坐标x2,y2的矩形内图像  

        ctx.rect(0,20,100,100);
    
        ctx.fillStyle = "red";
        ctx.fillRect(120,20,100,100);
    
        ctx.strokeStyle = "black";
        ctx.lineWidth = 10;
        ctx.strokeRect(250,20,300,100);
        
        ctx.fill();
        ctx.stroke();
    
        ctx.clearRect(100,50,50,50);//清除某个矩形区域的内容

    1.3 绘制圆形&扇形

    ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);  x和y参数是圆心坐标,radius是半径,

                                    startAngle和endAngle则是扇形的起始角度和终止角度(以弧度表示),

                                    anticlockwise表示做图时应该逆时针画(true)还是顺时针画(false)

    
    

      

        ctx.beginPath();
        ctx.lineWidth = 2;
        ctx.arc(100,100,50,Math.PI * 0.5,Math.PI * 2,true);
    
        ctx.closePath();//不结束路径,就只绘制弧线
        ctx.stroke();

    1.4 绘制五角星

            ctx.beginPath();
            for(var i = 0 ; i < 5 ; i ++){
                ctx.lineTo(Math.cos((18 + i*72)/180 * Math.PI) * 20,
                    -Math.sin((18 + i*72)/180 * Math.PI) * 20);
                ctx.lineTo(Math.cos((54 + i*72)/180 * Math.PI) * 20 * 0.5,
                    -Math.sin((54+ i*72)/180 * Math.PI) * 20 * 0.5);            
            }
            ctx.closePath();

     

    1.5 绘制渐变色

    createLinearGradient(x1,y1,x2,y2)  绘制从x1,y1起始,x2,y2终止的线性渐变,例如(0,0,0,100)从上至下的线性渐变,(0,0,100,0)从左至右

    addColorStop(stop,color)  从stop(介于 0.0 与 1.0 之间的值,表示渐变中开始与结束之间的位置)换颜色渐变

    createRadialGradient(x1,y1,x2,y2)  绘制从x1,y1起始,x2,y2终止的线性渐变,例如(0,0,0,100)从上至下的线性渐变,(0,0,100,0)从左至右

        var myGradient = ctx.createLinearGradient(0, 0, 500, 0); //从上至下的线性渐变
    
        myGradient.addColorStop(0, "#000"); 
        myGradient.addColorStop(1, "#fff");
    
        ctx.fillStyle = myGradient;
        ctx.fillRect(10,10,500,500);    
        var myGradient = ctx.createRadialGradient(400, 400, 0,400, 400,200); //从上至下的径向渐变
    
        myGradient.addColorStop(0, "#000"); 
        myGradient.addColorStop(1, "#fff");
    
        ctx.fillStyle = myGradient;
        ctx.fillRect(10,10,600,600);

    1.6 阴影

    ctx.shadowOffsetX  阴影距形状的水平距离

    ctx.shadowOffsetY  阴影距形状的垂直距离

    ctx.shadowBlur  阴影的模糊级别

    ctx.shadowColor  阴影的颜色

        ctx.shadowOffsetX = 10; // 设置水平位移
        ctx.shadowOffsetY = 10; // 设置垂直位移
        ctx.shadowBlur = 5; // 设置模糊度
        ctx.shadowColor = "rgba(0,0,0,0.2)"; // 设置阴影颜色
    
        ctx.fillStyle = "#CC0000"; 
        ctx.fillRect(10,10,200,100);

    1.7 绘制文本

    ctx.font  当前字体属性

    ctx.textAlign  对齐方式,包括center|end|left|right|start

    ctx.textBaseline  当前文本基线 ,包括alphabetic|top|hanging|middle|ideographic|bottom

    ctx.fillText()  绘制“被填充的”文本

    ctx.strokeText(text,x,y,maxWidth)  绘制文本(无填充),text文本,x,y文本坐标,maxWidth 文本最大宽度

    ctx.measureText(text,x,y,maxWidth)  返回包含指定文本宽度的对象

        // 在位置 250 创建红色基线
        ctx.strokeStyle="red";
        ctx.moveTo(250,20);
        ctx.lineTo(250,200);
        ctx.stroke();
    
        // 创建渐变
        var gradient=ctx.createLinearGradient(0,0,800,0);
        gradient.addColorStop("0","magenta");
        gradient.addColorStop("0.5","blue");
        gradient.addColorStop("1.0","red");
    
        ctx.fillStyle = gradient;
        ctx.font="30px Arial";
        // 显示不同的 textAlign 值
        ctx.textAlign="start";
        ctx.fillText("textAlign=start",250,60,120);
    
        ctx.textAlign="end";
        ctx.fillText("textAlign=end",250,90);
    
        ctx.textAlign="left";
        ctx.fillText("textAlign=left",250,120);
    
        ctx.textAlign="center";
        ctx.fillText("textAlign=center",250,150);
    
        ctx.textAlign="right";
        ctx.strokeText("textAlign=right",250,180);
    计划、执行、每天高效的活着学着
  • 相关阅读:
    Windows phone 7 OpenSource Project
    编程之美阅读笔记
    Java多线程中读写不一致问题
    pytorch性能瓶颈检查
    贪心会议安排
    网络编程之libevent
    笔记:自动求导【动手学深度学习v2】
    测试
    AnimeGAN+Flask部署过程
    手写哈希表
  • 原文地址:https://www.cnblogs.com/huxiaoyun90/p/4199403.html
Copyright © 2020-2023  润新知