简介
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;
//阴影模糊程度