2017-04-25 canvas 学习笔记

canvas 绘制线条

  • 嵌入式不建议使用,会导致内部图片拉伸
xxxxx
//获取 canvas 上下文
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
//2.绘制
    //绘制第一条直线
    //ctx.beginPath();

    //起点
    ctx.moveTo(100, 100);

    //终点
    ctx.lineTo(300, 100);
    //注意点:之前的操作,都是描述路径,不没有进行绘制

    //线宽
    ctx.lineWidth = 10;
    //颜色
    ctx.strokeStyle = 'red';

    //描边
    ctx.stroke();

    //3.画竖线
    //开启路径
    //作用:beginPath() 将当前路径和上一条路径隔离, 方便进行样式的设置和管理
    ctx.beginPath();

    //起点
    ctx.moveTo(200, 50);
    //终点
    ctx.lineTo(200, 350);

    //画斜线
    ctx.lineTo(350, 450);

    //闭合路径
    //作用:将路径线头和线尾连接,闭合
    ctx.closePath();

    ctx.lineWidth = 4;
    ctx.strokeStyle = 'green';

    //描边
    ctx.stroke();

绘制表格背景

 //1.获取canvas和上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //2.绘制背景
    //常量
    var margin = 10;//间距
    //行数
    var row = canvas.height / margin;
    //列数
    var col = canvas.width / margin;
    //遍历
    //横线
    for(var i = 0;i

绘制表格

  //1.获取canvas和上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //2.绘制背景

    //常量
    var margin = 10;//间距
    //行数
    var row = canvas.height / margin;
    //列数
    var col = canvas.width / margin;
    //遍历
    //横线
    for(var i = 0;i

绘制矩形

   //1.获取canvas和上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //2.绘制矩形一
 /*   ctx.rect(100, 100, 200, 100);

    //线宽
    ctx.lineWidth = 4;
    //颜色
    ctx.strokeStyle = 'red';

    //描边
    ctx.stroke();

    //填充色
    ctx.fillStyle = 'blue';

    //填充
    ctx.fill();*/


    //3.绘制矩形二
    //快速创建无填充矩形
    //作用: 快速的描述路径, 之后立即绘制
    //注意:一定要在绘制之前设置样式和线宽
   /* ctx.strokeStyle = 'red';
    ctx.lineWidth = 4;

    ctx.strokeRect(200, 200, 200, 100);*/

   //快速创建填充矩形
    ctx.fillStyle = 'blue';
    ctx.fillRect(200, 200, 200, 100);

绘制画板

  //1.获取canvas和上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //2.监听鼠标点击
    canvas.onmousedown = function (e) {

        //画布清空
        //canvas.width = 900;
        //清除一块矩形区域
        ctx.clearRect(0,0, canvas.width,canvas.height);

        //开启路径
        ctx.beginPath();

        //起点
        ctx.moveTo(e.offsetX, e.offsetY);
        //3.监听鼠标移动
        canvas.onmousemove = function (e) {
            //终点
            ctx.lineTo(e.offsetX, e.offsetY);

            ctx.strokeStyle = 'orange';
            ctx.lineWidth = 4;

            //描边
            ctx.stroke();
        };

        //4.监听鼠标抬起
        canvas.onmouseup = function () {
            //取消事件
            canvas.onmousemove = null;
            canvas.onmouseup = null;
        }


    }

绘制弧线

  //1.获取canvas和上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //2.画弧
    /*ctx.arc(200, 200, 100, 0, 90 *Math.PI/180);

    ctx.strokeStyle = 'red';
    ctx.lineWidth = 4;*/

    //逆时针画弧
    //counterclockwise:是否是逆时针。true是逆时针,false:顺时针(默认)
    ctx.arc(200, 200, 100, 0, 90 *Math.PI/180, true);
    ctx.strokeStyle = 'blue';
    ctx.lineWidth = 6;

    //描边
    ctx.stroke();

    //填充颜色
    ctx.fillStyle = 'green';
    ctx.fill();

非零正交原则

  • 填充时候判断,当正交数值为0时不绘制,与逆时针边线相交,正交数值-1,与顺时针边线相交,正交数值+1,非0时填充,为0时不填充

绘制奥运五环

 //1.获取canvas和上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //2.第一个五环
    var colorArr = ['red', 'green','blue', 'black', 'yellow'];
    for(var i = 0;i< colorArr.length;i++)
    {
        //开启路径
        ctx.beginPath();
        ctx.arc((i +1) * 100, 100, 80, 0, 2*Math.PI);
        ctx.strokeStyle = colorArr[i];
        ctx.lineWidth = 4;
        ctx.stroke();
    }

    //第二个五环
    for(var i = 0;i

绘制饼状图

  //1.获取canvas和上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //2.数据
    var data = [
        {name:'北京', color:'yellow', value:0.3},
        {name:'上海', color:'red', value:0.2},
        {name:'杭州', color:'green', value:0.1},
        {name:'深圳', color:'blue', value:0.15},
        {name:'广州', color:'pink', value:0.25}
    ];

    //3.常量
    //圆心
    var x0 = canvas.width * 0.5;
    var y0 = canvas.height * 0.5;
    //半径
    var radius = 150;
    //开始角度
    var beginAngle = -90 *Math.PI/180;

    //4.绘制饼状图
    for(var i = 0;i

绘制文字

  //1.获取canvas和上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');


    //2.绘制文字
    ctx.font = "100px '微软雅黑'";
    ctx.strokeStyle = 'blue';

    //绘制无填充文字
    ctx.strokeText('SeeMyGo', 200, 200);

    //填充文字颜色
    ctx.fillStyle = 'purple';
    //绘制填充的文字
    ctx.fillText('SeeMyGo', 200, 200);

    //3.文字对齐
    //注意:默认系统会给文字添加一条看不见的基线,只有对文字对齐方式修改,就是根据基线设置
    //开启路径
    ctx.beginPath();

    ctx.strokeStyle = 'red';
    ctx.lineWidth = 4;

    //3.1 垂直对齐方式
//    ctx.textAlign = 'center';

    //3.2 水平方向的对齐方式
//    ctx.textBaseline = 'top';

    //4.文字阴影
    //阴影模糊范围
    ctx.shadowBlur = 15;

    //阴影的颜色
    ctx.shadowColor = 'blue';
    //偏移
    ctx.shadowOffsetX = 15;
    ctx.shadowOffsetY = 15;

    //绘制第二个文字
    ctx.strokeText('Html5', 200, 350);
    ctx.fillText('Html5', 200, 350);

给饼状图添加文字

  //1.获取canvas和上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //2.数据
    var data = [
        {name:'北京', color:'yellow', value:0.3},
        {name:'上海', color:'red', value:0.2},
        {name:'杭州', color:'green', value:0.1},
        {name:'深圳', color:'blue', value:0.15},
        {name:'广州', color:'pink', value:0.25}
    ];

    //3.常量
    //圆心
    var x0 = canvas.width * 0.5;
    var y0 = canvas.height * 0.5;
    //半径
    var radius = 150;
    //开始角度
    var beginAngle = -90 *Math.PI/180;

    //4.绘制饼状图
    for(var i = 0;i 90 *Math.PI/180) && (textAngle < 270 * Math.PI/180)){
            ctx.textAlign = 'end';
        }

        //绘制文字
        ctx.fillText(text, textX, textY);

        //根据结束角度更新起始角度,作为下一个扇形的起始角度
        beginAngle = endAngle;
    }

绘制图片

  //1.获取canvas和上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //2.标签绘制-方式一
    /*var img = document.getElementById('icon');
    //注意:图片的绘制,一定要在加载完后绘制
    img.onload = function () {
        ctx.drawImage(img, 200, 200);
    }*/

    //3.对象绘制-方式二
    /*var img = new Image();
    img.src = 'images/img_01.jpg';
    //加载完后绘制图片
    img.onload = function () {
        ctx.drawImage(this, 200, 200);
    }*/

    //4.等比例绘制图片-方式三
  /*  var img = new Image();
    img.src = 'images/img_02.jpg';
    //加载完后绘制图片
    //等比公式
    // 设定高/ 设定宽 = 图片高度 / 图片宽度;
    // 设定高  = 图片高度 / 图片宽度 * 设定宽;
    var w = 200;
    img.onload = function () {
        //计算高度
        var h = img.height /img.width * w;
        ctx.drawImage(this, 200, 200, w, h);
    };*/

    //5.截取图片-方式四
    var img = new Image();
    img.src = 'images/img_01.jpg';

    img.addEventListener('load', function () {
        //img: 截取图片
        //50,50,120,120  截取的图片的x,y 和宽高
        //200, 200, 120,120 在画布上的x,y 和画布上显示的宽高
        ctx.drawImage(img, 50,50,120,120, 200, 200, 200,200);
    })

绘制帧动画

   //1.获取上下文
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //常量
    var duration = 200;//定时器时间
    var imgClipWH = 256;//截取宽高
    var index = 0; //图片角标, x
    var dir = 0;//方向 , 默认为0,代表往左

    //2.图片对象
    var image = new Image();
    image.src = 'images/girl.png';
    //图片加载完后绘制
    image.addEventListener('load', function () {

        //备份指针
        var self = this;

        //开启定时器
        setInterval(function () {
            //清空
            ctx.clearRect(0, 0, canvas.width, canvas.height);

            //截图
            ctx.drawImage(self, index * imgClipWH, dir * imgClipWH, imgClipWH, imgClipWH, 200,200,imgClipWH,imgClipWH);

            index++;
            //取模, 无限循环
            index %= 8;
        }, duration);

        //3.监听按钮点击
        var buttonList = document.querySelectorAll('button');
        console.log(buttonList);
        //遍历,添加事件
        for(var i = 0;i

你可能感兴趣的:(2017-04-25 canvas 学习笔记)