图形的着色区域有两种
描边区域: strokeStyle 代表了描边样式,描边区域的绘制方法是 stroke()、strokeRect() 或者strokeText() 。 填充区域: fillStyle 代表了填充样式,填充区域的绘制方法是 fill()、fillRect() 或者fillText() 。
图形的着色方式有3种
- 纯色
- 渐变
- 建立渐变对象的方式:
- 线性渐变: gradient=createLinearGradient(x1, y1, x2, y2)
- 径向渐变 gradient=createRadialGradient(x1, y1, r1, x2, y2, r2)
- 定义渐变的颜色节点 gradient.addColorStop(position, color)
- 赋值方式
- ctx.fillStyle= gradient
- ctx.strokeStyle= gradient
- 纹理
- 建立纹理对象:
- pattern=context.createPattern(image,”repeat|repeat-x|repeat-y|no-repeat”);
- 为着色样式赋值
- ctx.fillStyle= pattern
- ctx.strokeStyle= pattern

描边样式
影响描边样式的因素
strokeStyle:描边的颜色。
ctx.strokeStyle = 'red'
lineWidth:描边宽。定义描边的宽度,它是从路径的中心开始绘制的,内外各占宽度的一半。
ctx.lineWidth=40;

lineCap:描边端点样式。
<canvas id="canvas"></canvas><script>const canvas=document.getElementById('canvas');//canvas充满窗口canvas.width=window.innerWidth;canvas.height=window.innerHeight;//画笔const ctx=canvas.getContext('2d');/*strokeStyle:描边的着色样式*/ctx.strokeStyle='maroon';/*lineWidth:描边宽*/ctx.lineWidth=40;/*lineCap 描边端点样式* butt 没有端点,默认* round 圆形端点* square 方形端点* */ctx.save();ctx.lineCap='butt';ctx.beginPath();ctx.moveTo(50,50);ctx.lineTo(400,50);ctx.stroke();ctx.restore();ctx.save();ctx.lineCap='round';ctx.beginPath();ctx.moveTo(50,150);ctx.lineTo(400,150);ctx.stroke();ctx.restore();ctx.save();ctx.lineCap='square';ctx.beginPath();ctx.moveTo(50,250);ctx.lineTo(400,250);ctx.stroke();ctx.restore();</script>

lineJoin:描边拐角类型 。
<canvas id="canvas"></canvas><script>const canvas=document.getElementById('canvas');//canvas充满窗口canvas.width=window.innerWidth;canvas.height=window.innerHeight;//画笔const ctx=canvas.getContext('2d');/*strokeStyle:描边的着色样式*/ctx.strokeStyle='maroon';/*lineWidth:描边宽*/ctx.lineWidth=40;/*lineJoin 拐角类型* miter 尖角* round 圆角* bevel 切角* */ctx.save();ctx.lineJoin='miter';ctx.beginPath();ctx.moveTo(50,50);ctx.lineTo(400,50);ctx.lineTo(200,150);ctx.stroke();ctx.restore();ctx.save();ctx.lineJoin='round';ctx.beginPath();ctx.moveTo(50,250);ctx.lineTo(400,250);ctx.lineTo(200,350);ctx.stroke();ctx.restore();ctx.save();ctx.lineJoin='bevel';ctx.beginPath();ctx.moveTo(50,450);ctx.lineTo(400,450);ctx.lineTo(200,550);ctx.stroke();ctx.restore();</script>

miterLimit:拐角最大厚度(只适用于lineJoin=‘miter’ 的情况)。
<canvas id="canvas"></canvas><script>const canvas=document.getElementById('canvas');//canvas充满窗口canvas.width=window.innerWidth;canvas.height=window.innerHeight;//画笔const ctx=canvas.getContext('2d');/*strokeStyle:描边的着色样式*/ctx.strokeStyle='maroon';/*lineWidth:描边宽*/ctx.lineWidth=40;/*miterLimit 拐角限制,number 类型,如2,1,3*/ctx.save();ctx.miterLimit=2;ctx.beginPath();ctx.moveTo(50,50);ctx.lineTo(400,50);ctx.lineTo(400,150);ctx.stroke();ctx.restore();</script>

setLineDash(segments):将描边设置为虚线,可以通过getLineDash() 方法获取虚线样式。
<canvas id="canvas"></canvas><script>const canvas=document.getElementById('canvas');//canvas充满窗口canvas.width=window.innerWidth;canvas.height=window.innerHeight;//画笔const ctx=canvas.getContext('2d');/*strokeStyle:描边的着色样式*/ctx.strokeStyle='maroon';/*lineWidth:描边宽*/ctx.lineWidth=4;/* setLineDash(segments) 虚线 */ctx.save();ctx.beginPath();ctx.moveTo(50,100);ctx.lineTo(700,100);ctx.setLineDash([30,60,90]);ctx.stroke();ctx.restore();</script>

lineDashOffset:虚线的偏移量。
<canvas id="canvas"></canvas><script>const canvas=document.getElementById('canvas');//canvas充满窗口canvas.width=window.innerWidth;canvas.height=window.innerHeight;//画笔const ctx=canvas.getContext('2d');/*strokeStyle:描边的着色样式*/ctx.strokeStyle='maroon';/*lineWidth:描边宽*/ctx.lineWidth=4;/* lineDashOffset 虚线偏移 */ctx.save();ctx.beginPath();ctx.moveTo(50,100);ctx.lineTo(700,100);ctx.setLineDash([60]);ctx.stroke();ctx.restore();ctx.save();ctx.beginPath();ctx.moveTo(50,150);ctx.lineTo(700,150);ctx.setLineDash([60]);ctx.lineDashOffset=-90;ctx.stroke();ctx.restore();</script>
霓虹灯
实现思路:
- 爱心:两个三次贝塞尔曲线
- 描边
- 虚线偏移
<canvas id="canvas"></canvas><script>const canvas=document.getElementById('canvas');// canvas充满窗口canvas.width=window.innerWidth;canvas.height=window.innerHeight;// 画笔const ctx=canvas.getContext('2d');// 颜色数组const colors=['red','yellow'];function draw(){// 保存上下文对象的状态ctx.save();// 偏移坐标系ctx.translate(300,400);// 开始绘制路径ctx.beginPath();// 向路径集合中添加子路径// 绘制心形子路径// 设置路径起点ctx.moveTo(0,0);// 用两个三次贝塞尔曲线组成爱心ctx.bezierCurveTo(-200,-50,-180,-300,0,-200);ctx.bezierCurveTo(180,-300,200,-50,0,0);// 设置描边宽度ctx.lineWidth=10;ctx.setLineDash([30]);/*--------虚线1-------*/// 描边颜色ctx.strokeStyle=colors[0];// 以描边的方式显示路径ctx.stroke();/*--------虚线2-------*/// 描边颜色ctx.lineDashOffset=30;ctx.strokeStyle=colors[1];// 以描边的方式显示路径ctx.stroke();// 将上下文对象的状态恢复到上一次保存时的状态ctx.restore();}setInterval(function(){draw();colors.reverse();},200)</script>




