HTML5 Canvas——基础入门
认识canvas
-
-
<canvas>
标签只是图像容器,必须使用js来绘制图形 -
可以通过多种方法使用canvas绘制路径,盒,圆,字符以及添加图像
canvas画布
<!-- 注意: 标签通常需要指定一个id属性 (脚本中经常引用), width 和 height 属性定义的画布的大小. --> <canvas id="myCanvas" width="600" height="600" style="border: 1px solid red;background-color: pink;"> </canvas>
矩形
<!-- 1.矩形 --> <script type="text/javascript"> /*获取元素*/ var c = document.getElementById("myCanvas"); /*获取绘图工具*/ var ctx = c.getContext("2d"); /* 设置fillStyle属性可以是CSS颜色,渐变,或图案。fillStyle 默认设置是#000000(黑色)。 */ ctx.fillStyle = "#ccc"; /* fillRect(x,y,width,height) 方法定义了矩形当前的填充方式。 */ ctx.fillRect(50, 50, 200, 100); </script>
折线
<!-- 2.折线 --> <script type="text/javascript"> /*获取元素*/ var c = document.getElementById("myCanvas"); /*获取绘图工具*/ var ctx = c.getContext("2d"); /* 起点 */ ctx.moveTo(10, 10); /* 移动 */ ctx.lineTo(200, 100); ctx.lineTo(400, 400); /* 线宽 */ ctx.lineWidth = 20; /* 线条颜色 */ ctx.strokeStyle = 'red'; /* 使用 stroke() 方法来绘制线条 */ ctx.stroke(); </script>
<!-- 2.折线 --> <script type="text/javascript"> /*获取元素*/ var c = document.getElementById("myCanvas"); /*获取绘图工具*/ var ctx = c.getContext("2d"); /* 起点 */ ctx.moveTo(10, 10); /* 移动 */ ctx.lineTo(200, 100); ctx.lineTo(400, 400); /* 线宽 */ ctx.lineWidth = 20; /* 线条颜色 */ ctx.strokeStyle = 'red'; /* 使用 stroke() 方法来绘制线条 */ ctx.stroke(); </script>
红色填充的三角形
<!-- 3.画一个红色填充的三角形 --> <script type="text/javascript"> /*获取元素*/ var c = document.getElementById("myCanvas"); /*获取绘图工具*/ var ctx = c.getContext("2d"); /* 起点 */ ctx.moveTo(100,100); /* 移动 */ ctx.lineTo(200,200); ctx.lineTo(100,200); //这样连接的不是很完美 //ctx.lineTo(100,100); ctx.closePath();//自动闭合 /* 线宽 */ ctx.lineWidth = 20; /* 线条颜色 */ ctx.strokeStyle = 'green'; /* 使用 stroke() 方法来绘制线条 */ ctx.stroke(); /* 填充 */ ctx.fillStyle = 'red'; //填充 ctx.fill(); </script>
镂空的正方形
我填充了绿色
开启新路径方法:
<script type="text/javascript"> /*获取元素*/ var c = document.getElementById("myCanvas"); /*获取绘图工具*/ var ctx = c.getContext("2d"); /* 1.画一个大的正方 */ ctx.moveTo(100, 100); ctx.lineTo(300, 100); ctx.lineTo(300, 300); ctx.lineTo(100, 300); ctx.closePath(); /* 边框线宽 */ ctx.lineWidth = 5; /* 线条颜色 */ ctx.strokeStyle = 'yellow'; /* 使用 stroke() 方法来绘制线条 */ ctx.stroke(); /* 填充 */ ctx.fillStyle = 'purple'; ctx.fill(); //开启新路径 让每一段路径称为独立的路径 可以分别设置样式(填充的样式 描边的样式) ctx.beginPath(); /* 2.画一个小的正方 */ ctx.moveTo(120, 120); ctx.lineTo(120, 220); ctx.lineTo(220, 220); ctx.lineTo(220, 120); ctx.closePath(); /* 边框线宽 */ ctx.lineWidth = 5; /* 线条颜色 */ ctx.strokeStyle = 'red'; /* 使用 stroke() 方法来绘制线条 */ ctx.stroke(); /* 填充 */ ctx.fillStyle = 'green'; ctx.fill(); /* 填充原则:非零环绕规则: 从该区域向外画一条线,与边框相交顺时针+1,逆时针-1,和为0时,不填充 不管是多少个边框嵌套,都要从每个嵌套区域划线一次 */ </script>
非零环绕原则
<script type="text/javascript"> /*获取元素*/ var c = document.getElementById("myCanvas"); /*获取绘图工具*/ var ctx = c.getContext("2d"); /* 1.画一个大的正方 */ ctx.moveTo(100, 100); ctx.lineTo(300, 100); ctx.lineTo(300, 300); ctx.lineTo(100, 300); ctx.closePath(); /* 边框线宽 */ ctx.lineWidth = 5; /* 线条颜色 */ ctx.strokeStyle = 'yellow'; /* 使用 stroke() 方法来绘制线条 */ ctx.stroke(); /* 2.画一个小的正方 */ ctx.moveTo(120, 120); ctx.lineTo(120, 220); ctx.lineTo(220, 220); ctx.lineTo(220, 120); ctx.closePath(); /* 边框线宽 */ ctx.lineWidth = 5; /* 线条颜色 */ ctx.strokeStyle = 'red'; /* 使用 stroke() 方法来绘制线条 */ ctx.stroke(); /* 填充 */ /* 填充原则:非零环绕规则: 从该区域向外画一条线,与边框相交顺时针+1,逆时针-1,和为0时,不填充 不管是多少个边框嵌套,都要从每个嵌套区域划线一次 */ ctx.fillStyle = 'green'; ctx.fill(); </script>
折线过度
<script type="text/javascript"> var c = document.getElementById("myCanvas"); var ctx = c.getContext("2d"); /*红色 10*/ ctx.moveTo(100,100); ctx.lineTo(200,50); ctx.lineTo(300,100); ctx.lineWidth = 10; ctx.lineCap = 'butt'; //默认 线两端样式 啥也没有 ctx.lineJoin = 'miter'; //没有没有任何样式 ctx.strokeStyle = 'red'; ctx.stroke(); ctx.beginPath(); /*蓝色 15*/ ctx.moveTo(100,200); ctx.lineTo(200,150); ctx.lineTo(300,200); ctx.lineWidth = 15; ctx.lineCap = 'square'; //线两端样式 方形的 ctx.lineJoin = 'bevel'; ctx.strokeStyle = 'blue'; ctx.stroke(); ctx.beginPath(); /*绿色 20*/ ctx.moveTo(100,300); ctx.lineTo(200,250); ctx.lineTo(300,300); /*线两端样式*/ ctx.lineCap = 'round';//线两端样式 圆帽子 /*线拐点样式*/ ctx.lineJoin = 'round'; ctx.lineWidth = 20; ctx.strokeStyle = 'green'; ctx.stroke(); </script>