• canvas


    canvas绘图过程:

    /*要有画布:canvas标签:宽和高是不能通过css3来设置,宽和高不能有px

    *创建绘图的对象

    *开始的位置

    *结束的位置

    *画

    */

    canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:

    <canvas width="800" height="600"></canvas>
        <script>
            //获取画布
            var can=document.querySelector("canvas");
            //获取绘图对象
            var ctx=can.getContext("2d");
            //开始的位置
            ctx.moveTo(100,100);
            //结束的位置
            ctx.lineTo(300,100);
            //设置线的颜色
            ctx.strokeStyle="red";
            //设置线的宽度
            ctx.lineWidth=10;
            //绘制
            ctx.stroke();

      //重置路径
            ctx.beginPath();//作用是为防止下方的stroke()又重新画了一遍

      //再画一条线
            ctx.moveTo(200,200);
            ctx.lineTo(400,200);
            ctx.strokeStyle="green";
            ctx.lineWidth=10;
            ctx.stroke();
            ctx.beginPath();
        </script>

    小例子:1.画一个三角形(闭合路径)

    var can=document.querySelector("canvas");
        var ctx=can.getContext("2d");
        ctx.moveTo(100,100);
        ctx.lineTo(100,300);
        ctx.lineTo(300,300);
        ctx.closePath();//闭合路径,画图就差最后一步合并了,那么此时可以使用
        ctx.stroke();

    2.canvas连接

     //设置连接处的样式
        ctx.lineJoin="bevel";//round圆角  bevel平角 miter默认的尖角
        //线帽样式(线的两端)
        ctx.lineCap="round";//round   square   butt(默认)

    3.非零环绕

    原理:我们在要填充的区域内放置一原点,引出一条射线,默认记为0,与其相交的边如果是逆时针的,记为-1,顺时针记为+1,如果有多条相交线,加起来如果为0则改区域不填充。

    var can=document.querySelector("canvas");
        var ctx=can.getContext("2d");
        //顺时针
        ctx.moveTo(100,100);
        ctx.lineTo(400,100);
        ctx.lineTo(400,400);
        ctx.lineTo(100,400);
        ctx.closePath();
        ctx.stroke();
        //逆时针
        ctx.moveTo(250,150);
        ctx.lineTo(150,250);
        ctx.lineTo(200,250);
        ctx.lineTo(200,350);
        ctx.lineTo(300,350);
        ctx.lineTo(300,250);
        ctx.lineTo(350,250);
        ctx.closePath();
        ctx.stroke();
        ctx.fillStyle="black";
        ctx.fill();

    4.线性渐变

    var can=document.querySelector("canvas");
        var ctx=can.getContext("2d");
        //创建渐变方案
        //起始位置的横纵坐标,结束位置的横纵坐标
        var lgd=ctx.createLinearGradient(100,100,500,100);
        //添加渐变颜色
        //0开始的,1结束,0-1之间的小数
        lgd.addColorStop(0,'red');
        lgd.addColorStop(0.5,'green');
        lgd.addColorStop(1,'blue');
        //把渐变的方案给strokeStyle
        ctx.strokeStyle=lgd;
        ctx.moveTo(100,100);
        ctx.lineTo(500,100);
        ctx.lineWidth=20;
        ctx.stroke();

    5.径向渐变

     var can=document.querySelector("canvas");
        var ctx=can.getContext("2d");
        //创建渐变方案
        //开始的横纵坐标,半径,结束的横纵坐标,半径
        var rgd=ctx.createRadialGradient(200,150,50,200,150,100);
        //添加渐变的颜色
        rgd.addColorStop(0,'red');
        rgd.addColorStop(0.5,'green');
        rgd.addColorStop(1,'blue');
        //设置填充的样式
        ctx.fillStyle=rgd;
        ctx.moveTo(100,50);
        ctx.lineTo(300,50);
        ctx.lineTo(300,300);
        ctx.lineTo(100,300);
        ctx.closePath();
        ctx.stroke();//绘制
        ctx.fill();//填充

    6.虚线

    //虚线 参数:是一个数组,第一个线的长度,第二个空白的长度
        ctx.setLineDash([20,5,10]);//实线部分和白线部分的大小依次是20,5,10

     ctx.stroke();

    7.弧度

    //绘制弧度:圆心坐标,半径,开始的弧度,结束的弧度,默认顺时针(false)
        ctx.arc(200,150,50,Math.PI/2,2*Math.PI,true);//Math.PI代表180度
        ctx.stroke();

    8.文本

    var can=document.querySelector("canvas");
        var ctx=can.getContext("2d");
        ctx.moveTo(300,0);
        ctx.lineTo(300,400);
        ctx.stroke();
        ctx.beginPath();
        ctx.moveTo(0,200);
        ctx.lineTo(600,200);
        ctx.stroke();
        //绘制文本  是像素和字体
        ctx.font="50px 全新硬笔新书简";
        //设置文本的对齐方式
        ctx.textAlign="center";//left|right|center
        ctx.textBaseline="middle";//top|bottom|alphabetic(默认)
        //设置阴影的颜色
        ctx.shadowColor="red";
        //水平方向偏移量
        ctx.shadowOffsetX=15;
        ctx.shadowOffsetY=5;
        //阴影的模糊度
        ctx.shadowBlur=5;
        //绘制文本,镂空效果;参数1:文字内容,参数2:横坐标,参数3:纵坐标
        ctx.strokeText("绘制文本",300,200);
        //填充文本
        ctx.fillText("绘制文本",300,200);

    9.图片

    var can=document.querySelector("canvas");
            var ctx=can.getContext("2d");
            //绘制图片
            var img=document.createElement("img");
            img.src="0.jpg";
            //图片和画图发生关系,才可以绘制这个图片
            //图片加载
            img.onload=function(){
                ctx.drawImage(img,100,100,200,100);
                //图片对象,图片选择的横纵坐标,图片的宽和高,画布的横纵坐标,画布让图片显示的宽和高
                ctx.drawImage(img,180,50,350,170,100,100,350,170);
            };

    10.动画矩形

    原理:开定时器:清理画布,重新画

    var can=document.querySelector("canvas");
            var ctx=can.getContext("2d");
            var x=0;//开始的坐标
            var step=5;//每次移动的步数
            var i=1;//标记(设置矩形向右移动后再回来)
            setInterval(function(){
                //清理画布
                ctx.clearRect(0,0,can.width,can.height);
                ctx.fillStyle="green";
                ctx.fillRect(x,100,100,200);//参数:横纵坐标,宽和高;fillRect()方法用于绘制已填充的矩形
                ctx.stroke();
                x+=step*i;//控制横坐标
                if(x>can.width-100){
                    i=-1;
                }else if(x<=0){
                    i=1;
                }
            },10);

    11.画布平移

    var can=document.querySelector("canvas");
        var ctx=can.getContext("2d");
        //平移画布的原点,默认原点在左上角
        //设置画布原点平移
        ctx.translate(100,100);
        //画一条线
        ctx.moveTo(0,0);//仍然是0,0位置为起始点
        ctx.lineTo(100,0);
        ctx.lineWidth=10;
        ctx.strokeStyle='green';
        ctx.stroke();

    12.旋转

    ctx.rotate(Math.PI/2);//90度

    13.缩放

    var can=document.querySelector("canvas");
        var ctx=can.getContext("2d");
        ctx.translate(300,200);
        //缩放的比例
        ctx.scale(2,0.5);//参数1相对于原来的横坐标的缩放值,参数2相对于原来纵坐标的缩放值
        ctx.arc(0,0,100,0,2*Math.PI);//开始弧度0,结束弧度360,这是一个圆
        ctx.stroke();

  • 相关阅读:
    Xshell 连接Linux服务器自动中断问题
    JavaScript验证输入的字符是否包含表情
    jQuery实现单击某个标签改变样式
    ELK之五----logstash收集haproxy日志
    ELK之四-----logstash收集nginx日志及tcp日志
    ELK之三-----JAVA日志多行合并、tomcat json日志收集与处理
    文本三剑客之二---Sed用法
    ELK之二----kibana部署及logstash单(多)日志收集
    ELK之一-----Elasticsearch介绍与部署
    Jenkins之五-----基于脚本实现代码部署与回滚
  • 原文地址:https://www.cnblogs.com/qyuan/p/9404813.html
Copyright © 2020-2023  润新知