开始学习canvas动画,先来个简单的示例,了解一下canvas以及实际使用中的小问题。
1、目标
画两条平行的直线,第一条线的颜色是红色、第二条线的颜色是绿色
2、示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
<style type="text/css">
canvas{
border: 1px solid black;
}
</style>
</head>
<body>
<canvas width="600" height="400"></canvas>
<script type="text/javascript">
//获取画布
var c = document.querySelector('canvas');
//获取绘图对象
var ctx = c.getContext("2d");
//画一条直线 1
//开始位置
ctx.moveTo(50,50);
//结束位置
ctx.lineTo(300,50);
//线的颜色
ctx.strokeStyle = 'red';
//设置线的宽度
//ctx.lineWidth = 10;
//绘制 画线
ctx.stroke();
//再画一条线 2
//开始位置
ctx.moveTo(50,100);
//结束位置
ctx.lineTo(300,100);
//线的颜色
ctx.strokeStyle = 'green';
//设置线的宽度
//ctx.lineWidth = 10;
//绘制 画线
ctx.stroke();
</script>
</body>
</html>
显示效果如下:
- 存在的问题:第一条直线不是红色,而是红色和绿色叠加后的颜色。
- 原因:绘制时调用了两次stroke()方法,导致第一条线被画了两次。
- 解决方法:
只调用一次stroke方法,代码如下:
<script type="text/javascript">
//获取画布
var c = document.querySelector('canvas');
//获取绘图对象
var ctx = c.getContext("2d");
//画一条直线 1
//开始位置
ctx.moveTo(50,50);
//结束位置
ctx.lineTo(300,50);
//线的颜色
ctx.strokeStyle = 'red';
//设置线的宽度
//ctx.lineWidth = 10;
//绘制 画线
//ctx.stroke();
//再画一条线 2
//开始位置
ctx.moveTo(50,100);
//结束位置
ctx.lineTo(300,100);
//线的颜色
ctx.strokeStyle = 'green';
//设置线的宽度
//ctx.lineWidth = 10;
//绘制 画线
ctx.stroke();
</script>
显示效果如下:
- 存在的问题:第一条直线的颜色也变成绿色。
- 原因:绘制之前,线的颜色被设置为绿色ctx.strokeStyle = 'green',覆盖之前的红色设置。
- 解决方法:
在第一条直线绘制完成后,使用beginPath()方法重置路径再画第二条线
代码如下:
<script type="text/javascript">
//获取画布
var c = document.querySelector('canvas');
//获取绘图对象
var ctx = c.getContext("2d");
//画一条直线 1
//开始位置
ctx.moveTo(50,50);
//结束位置
ctx.lineTo(300,50);
//线的颜色
ctx.strokeStyle = 'red';
//设置线的宽度
//ctx.lineWidth = 10;
//绘制 画线
ctx.stroke();
//重置路径
ctx.beginPath();
//再画一条线 2
//开始位置
ctx.moveTo(50,100);
//结束位置
ctx.lineTo(300,100);
//线的颜色
ctx.strokeStyle = 'green';
//设置线的宽度
//ctx.lineWidth = 10;
//绘制 画线
ctx.stroke();
</script>
显示效果如下:
3、总结:
当在画布上进行多次绘制时,在不同的绘图之间调用beginPath()方法重置路径,即可达到预期的效果。