html5新增特性之画布canvas的使用
目录
一、基本用法
二、canvas的使用
1、绘制一个矩形
填充矩形
轮廓矩形
2、清除画布区域
3、绘制一个圆
填充圆
轮廓圆
会移动的圆
4、渐变色绘制
线性渐变
径向渐变
5、绘制线段
绘制一个三角形
6、绘制图片
7、绘制视频
8、绘制文本
一、基本用法
1、获取canvas对象——获取画布
通过document.getElementById()等方法取得canvas对象。
var canvas = document.querySelector('canvas');
2、取得上下文(context)——获取画笔
图形上下文是一个封装了很多绘图功能的对象,参数只能是“2d”
var context = canvas.getContext('2d');
3、定义填充样式
实心填充样式:
context.fillStyle='pink';
轮廓样式:
context.strokeStyle = 'pink'
4、绘制填充图形
绘制填充图形:
context.fill();
绘制边框图形:
context.stroke();
绘制填充矩形:
//第一个参数是x轴开始位置,第二个参数是y轴开始位置,第三个参数是绘制图形的宽,第四个位置是绘制图形的高
context.fillRect(10,10,100,100)
绘制轮廓矩形:
//第一个参数是x轴开始位置,第二个参数是y轴开始位置,第三个参数是绘制图形的宽,第四个位置是绘制图形的高
context.strokeRect(20, 20, 200, 200)
二、canvas的使用
1、绘制一个矩形
填充矩形
(1)获取画布
(2)获取画笔
(3)给图像设置填充样式
(4)绘制图形
<body>
<!-- 画布元素-->
<canvas width="400px" height="400px"></canvas>
<script>
//1、获取画布
var canvas = document.querySelector('canvas')
//2、获取画笔
var context = canvas.getContext('2d')
//3、给图形设置填充样式
context.fillStyle = 'pink' //实心填充
//4、绘制图形
//fillRect有4个参数:x轴起始位置,y轴起始位置,宽,高
context.fillRect(20, 20, 200, 200)
</script>
</body>
轮廓矩形
<body>
<canvas width="400px" height="400px"></canvas>
<script>
//1、获取画布
var canvas = document.querySelector('canvas')
//2、获取画笔
var context = canvas.getContext('2d')
//3、给轮廓图形设置填充样式
context.strokeStyle = 'pink'
//4、给轮廓矩形设置线宽
context.lineWidth = 8; //默认1px
//5、绘制图形
//strokeRect有4个参数:x轴起始位置,y轴起始位置,宽,高
context.strokeRect(20, 20, 200, 200)
</script>
</body>
2、清除画布区域
可以选择清除部分区域,也可以清除全部区域,取决于我们设置的参数。
<body>
<canvas width="400px" height="400px"></canvas>
<script>
//1、获取画布
var canvas = document.querySelector('canvas')
//2、获取画笔
var context = canvas.getContext('2d')
//3、给图形设置填充样式
context.fillStyle = 'pink' //实心填充
//4、绘制图形
//fillRect有4个参数:x轴起始位置,y轴起始位置,宽,高
context.fillRect(20, 20, 200, 200)
//清除画布部分区域
//clearRect有4个参数:x轴起始位置,y轴起始位置,宽,高
context.clearRect(100,100,50,50);
//清除画布全部区域
// context.clearRect(0,0,400,400);
</script>
</body>
3、绘制一个圆
需要给开始路径 context.beginPath() 和结束路径 context.closePath(),在开始路径和结束路径之间绘制圆。
填充圆
<body>
<canvas width="600px" height="600px"></canvas>
<script>
//1、获取画布
var canvas = document.querySelector('canvas')
//2、获取画笔
var context = canvas.getContext('2d')
//3、需要给开始路径
context.beginPath()
//4、绘制圆
//arc有6个参数:x轴开始位置,y轴开始位置,r半径,开始弧度,结束弧度,布尔值(true代表逆时针绘制,false代表顺时针绘制,默认false)
context.arc(100, 100, 80, 0, Math.PI * 2, true)
// 5、绘制圆的填充样式
context.fillStyle='rgb(253, 153, 0)';
// 6、绘制填充圆
context.fill();
// 7、需要给结束路径
context.closePath();
</script>
</body>
轮廓圆
绘制轮廓圆只需要把fill改成stroke即可。
<body>
<canvas width="600px" height="600px"></canvas>
<script>
//1、获取画布
var canvas = document.querySelector('canvas')
//2、获取画笔
var context = canvas.getContext('2d')
//3、需要给开始路径
context.beginPath()
//4、绘制圆
//arc有6个参数:x轴开始位置,y轴开始位置,r半径,开始弧度,结束弧度,布尔值(true代表逆时针绘制,false代表顺时针绘制,默认false)
context.arc(100, 100, 80, 0, Math.PI * 2, true)
// 5、绘制圆轮廓的样式
context.strokeStyle='rgb(253, 153, 0)';
//6、绘制轮廓圆
context.stroke()
// 7、需要给结束路径
context.closePath();
</script>
</body>
会移动的圆
先画一个圆,然后再写移动函数,移动过程不断绘制圆,但是注意要把之前的圆清除掉。
<body>
<canvas width="600px" height="600px"></canvas>
<script>
// 1.获取画布
var canvas = document.querySelector('canvas');
// 2.获取上下文对象
var context = canvas.getContext('2d');
var obj = {
x: 100,
y: 100,
r: 100,
color: 'rgb(253, 153, 0)'
};
// 声明绘制圆的方法
function draw(obj) {
context.beginPath();
context.arc(obj.x, obj.y, obj.r, 0, Math.PI * 2);
// 绘制填充圆样式
context.fillStyle=obj.color;
// 绘制填充圆
context.fill();
context.closePath();
}
// 声明圆移动的方法
function move(obj) {
obj.x += 5;
obj.y += 5;
draw(obj);
}
setInterval(function () {
// 清除原先的圆
context.clearRect(0, 0, 600, 600);
move(obj);
}, 300);
draw(obj);
</script>
</body>
4、渐变色绘制
线性渐变
沿对角线(左上至右下)方向渐变
<body>
<canvas width="600px" height="600px"></canvas>
<script>
// 1.获取画布
var canvas = document.querySelector('canvas');
// 2.获取画笔
var context = canvas.getContext('2d');
// 3.绘制一个线性渐变图形
// 3.1创建一个线性渐变对象
// createLinearGradient有4个参数:渐变x轴开始位置,渐变y轴开始位置,渐变结束x轴位置,渐变结束y轴位置
var l = context.createLinearGradient(0, 0, 400, 400);
// 3.2给渐变图形填充颜色
// addColorStop有2个参数:阈值0-1填充百分比,颜色
l.addColorStop(0, 'rgb(122, 62, 186)');
l.addColorStop(0.25, 'rgb(110, 113, 224)');
l.addColorStop(0.5, 'rgb(234, 191, 198)');
l.addColorStop(0.75, 'rgb(40, 193, 204)');
l.addColorStop(1, 'rgb(113, 230, 107)');
// 4.将渐变对象给到图形填充样式
context.fillStyle = l;
// 5.绘制填充图形
context.fillRect(0, 0, 400, 400);
</script>
</body>
径向渐变
同心圆渐变
<body>
<canvas width="600px" height="600px"></canvas>
<script>
// 1.获取画布
var canvas = document.querySelector('canvas');
// 2.获取画笔
var context = canvas.getContext('2d');
// 3.绘制一个线性渐变图形
// 3.1创建一个线性渐变对象
// createRadialGradient有6个参数:前三个参数:小圆心x轴开始位置,y轴开始位置,半径;后三个参数:大圆心x轴开始位置,y轴开始位置,半径
var g = context.createRadialGradient(200,200,50,200,200,200);
// 3.2给渐变图形填充颜色
// addColorStop有2个参数:阈值0-1填充百分比,颜色
g.addColorStop(0, 'rgb(122, 62, 186)');
g.addColorStop(0.25, 'rgb(110, 113, 224)');
g.addColorStop(0.5, 'rgb(234, 191, 198)');
g.addColorStop(0.75, 'rgb(40, 193, 204)');
g.addColorStop(1, 'rgb(113, 230, 107)');
// 4.将渐变对象给到图形填充样式
context.fillStyle = g;
// 5.绘制填充图形
context.fillRect(0, 0, 400, 400);
</script>
</body>
5、绘制线段
<body>
<canvas width="600px" height="600px"></canvas>
<script>
// 获取画布
var canvas = document.querySelector('canvas');
// 获取画笔
var context = canvas.getContext('2d');
context.lineWidth = 5;
// 需要开始路径
context.beginPath();
// 绘制线段 moveTo从哪里开始 lineTo到哪里结束
context.moveTo(10, 10);
context.lineTo(110, 110);
context.lineTo(210, 10);
context.lineTo(310, 110);
// 给线段设置颜色
context.strokeStyle = 'red';
// 绘制线段
context.stroke();
// 需要结束路径
context.closePath();
</script>
</body>
绘制一个三角形
<body>
<canvas width="600px" height="600px"></canvas>
<script>
// 获取画布
var canvas = document.querySelector('canvas');
// 获取画笔
var context = canvas.getContext('2d');
context.lineWidth = 5;
// 需要开始路径
context.beginPath();
// 绘制线段 moveTo从哪里开始 lineTo到哪里结束
context.moveTo(10, 10);
context.lineTo(110, 110);
context.lineTo(210, 10);
// context.lineTo(10, 10);
// 需要结束路径
context.closePath();
// 给线段设置颜色
context.strokeStyle = 'red';
// context.fillStyle = 'red';
// 绘制线段
context.stroke();
// context.fill();
</script>
</body>
6、绘制图片
<body>
<canvas width="600px" height="600px"></canvas>
<script>
// 获取画布
var canvas=document.querySelector('canvas');
// 获取画笔
var context=canvas.getContext('2d');
// 创建一个img标签 构造函数方式new Image();
var img=new Image();
// console.log(img);
img.src='https://img2.baidu.com/it/u=2163681967,1120787845&fm=253&fmt=auto&app=138&f=PNG?w=200&h=267';
// 绘制图片,drawImage有5个参数:要绘制得图片/视频,开始x、y轴位置,宽高
img.onload=function(){
context.drawImage(img,0,0,200,200);
}
</script>
</body>
7、绘制视频
<body>
<canvas width="600px" height="600px"></canvas>
<video controls src="../音视频/1.mp4" width="300px"></video>
<script>
// 获取画布
var canvas=document.querySelector('canvas');
// 获取画笔
var context=canvas.getContext('2d');
var video=document.querySelector('video');
function draw(){
context.drawImage(video,0,0,300,300);
// 请求动画帧
requestAnimationFrame(draw);
}
draw()
</script>
</body>
8、绘制文本
<body>
<canvas width="600px" height="600px"></canvas>
<script>
// 获取画布
var canvas=document.querySelector('canvas');
// 获取画笔
var context=canvas.getContext('2d');
// 绘制文本
context.font='25px bold';
// 参数:要绘制得文本 x y 起始位置
// context.fillText('hello world',100,100);
context.strokeText('hello yeziyes',100,100);
</script>
</body>