Canvas

作者: 冯小胖儿 | 来源:发表于2016-12-01 20:58 被阅读0次

简介

canvas 来源

html5新属性 使用JS API

兼容问题

IE8以下不支持canvas

注意

不要使用CSS设置canvas标签的宽高,使用自身宽高属性设置

作用

  • 绘制线
  • 绘制三角形
  • 绘制矩形
  • 绘制圆形
  • 绘制图片
  • 绘制视频
  • 图片阴影

常用方法

绘制步骤:

一、拿到画布、画笔

<body>
    <canvas id="canvas" width="500" height="500">
        <p>您的浏览器不支持canvas标签,请升级至最新版本!</p>
    </canvas>
</body>

<script type="text.javascript>
    //获取到canvas标签
    var canvas = document.getElementById('canvas');
    
    //获取到上下文对象(画笔)
    var ctx = canvas.getContext('2d');
</script>

二、绘制方法

ctx.beginPath(); //开始绘制
ctx.moveTo(x, y); //放置起始点
ctx.lineTo(x, y); //放置中间点,可以放置多个
ctx.lineTo(x, y);
ctx.lineTo(x, y);
...
ctx.closePath(); //结束绘制,会把终点和起点连起来
ctx.storke(); //进行绘制线
ctx.fill(); //进行填充

注意:1、当设置线宽和填充颜色时,会发生覆盖情况,没有优先级,由代码先后顺序决定(后面的代码会覆盖前面的代码);
2、线宽是由中线往俩边增加宽度

绘制矩形
x: 起点x坐标; y: 起点y坐标; w: 矩形的宽; h: 矩形的高;

ctx.strokeRect(x, y, w, h); //按照矩形画线
ctx.fillRect(x, y, w, h); //按照矩形填充

绘制文字

ctx.font = '50px 黑体'; //设置字体大小、字体样式
ctx.strokeText('text', x, y, maxWidth=500); //描绘文字
ctx.fillText('text', x, y, maxWidth=500); //填充文字

绘制圆形
x: 圆心x坐标; y: 圆心y坐标; r: 圆的半径; startAngle: 开始弧度; endAngle: 结束弧度; direction: true(逆时针画线)/ false(顺时针画线)

ctx.arc(x, y, r, startAngle, endAngle, direction);

注意:绘制多个圆或半圆时,要设置ctx.beginPath();,否则每个圆会连起来

二次贝塞尔曲线

ctx.moveTo(); //绘制起点
ctx.quadraticCurveTo(x2, y2, x3, y3);

//x2: 基准点x坐标; y2: 基准点y坐标; x3: 终点x坐标; y3: 终点y坐标;

ctx.stroke(); //绘制线

三次贝塞尔曲线

ctx.moveTo(); //绘制起点
ctx.bezierCurveTo(x2, y2, x3, y3, x4, y4); //x2: 基准点x坐标; y2: 基准点y坐标; x3: 基准点x坐标; y3: 基准点y坐标; x4: 终点x坐标; y4: 终点y坐标;
ctx.stroke(); //绘制线

绘制图片

// 如果想把图片放到canvas中,需要向创建image对象
var img = new Image();
img.src = '地址';
img.onload = function(){
    // 必须等图片加载完成才能开始绘制
    `ctx.drawImage(img,起点x坐标,起点y坐标,图片在Canvas里的宽,图片在Canvas里的高);`
}

ctx.drawImage(img, x, y);

ctx.drawImage(img, x, y, w, h);

清除画布
x: 起点x坐标; y: 起点y坐标; w: 清除的宽; h: 清除的高;

ctx.clearRect(x, y, w, h);

变形
注意:改变了坐标系,不会影响已经绘制的内容

  • 位移: ctx.translate(x, y); //把原点移到(x, y)点
  • 缩放: ctx.scale(scaleX, scaleY);
  • 旋转: ctx.rotate(Math.PI / 8); //单位是弧度

判断是否点中

var res = ctx.isPointInPath(x, y); //判断是否点中了某个区域
//注意:如果进行了描边,点击内部也会触发
var res = ctx.isPointInStroke(x, y); //判断是否点中了边框

常用属性

添加颜色

ctx.fillStyle = 'red'; //填充颜色
ctx.strokeStyle = 'red'; //线的颜色

线

ctx.lineWidth = 50; //线的宽度
ctx.lineCap = 'round'; //线末尾形状
ctx.lineJoin = 'round'; //当俩条边交汇,创建圆角边

文字

ctx.textAlign = 'start'; //文字水平对齐方式
//值:start/left, center, end/right

ctx.textBaseline = 'top'; //文字垂直对齐方式
//值: top, middle, bottom

ctx.font = '50px 宋体'; //注意:单独设置字体大小不起作用,必须同时设置字体

阴影

ctx.shadowColor = 'red'; //阴影颜色
ctx.shadowOffsetX = 10; //阴影X轴偏移量
ctx.shadowOffsetY = 10; //阴影Y轴偏移量
ctx.shadowBlur = 10; //阴影模糊程度

相关文章

网友评论

      本文标题:Canvas

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