复习
之前我们学习过绘制线条使用stroke(),绘制填充图形使用fill()。给绘制的图形上色使用fillStyle。还学过绘制各种各样的形状。
学习
这一节,我们学习给线条添加样式。
线条的宽度
通过lineWidth来设置线条的宽度。范围时大于0.
线条末端样式
通过lineCap来设置线条的末端样式,一共有三个值
butt 正常的方形结束
round 以圆形结束,线条长度会多出线条宽度的一半
square以正常的方形结束,线条长度会多出线条宽度的一半
如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30<canvas width="500" height="500" id="mycanvas"></canvas>
<script>
canvas = document.getElementById('mycanvas')
let ctx = canvas.getContext('2d')
ctx.beginPath()
ctx.moveTo(10, 50)
ctx.lineWidth = 100
ctx.lineCap = 'square'
ctx.lineTo(400, 50)
ctx.stroke()
ctx.closePath()
ctx.beginPath()
ctx.moveTo(10, 170)
ctx.lineWidth = 100
ctx.lineCap = 'butt'
ctx.lineTo(400, 170)
ctx.stroke()
ctx.closePath()
ctx.beginPath()
ctx.moveTo(10, 290)
ctx.lineWidth = 100
ctx.lineCap = 'round'
ctx.lineTo(400, 290)
ctx.stroke()
ctx.closePath()
</script>
险段交界处的样式通过lineJoin()来设置
- round 交界处呈圆形
- bevel 交界处的三角形被删去了角
- miter 默认模式,尖尖的角
虚线
截止目前,我们画的都是实现,如果想画虚线,大概是要画很多条线段了,实际上不用这么麻烦,有现成的方法帮我们解决这个问题。
setLineDash([num1, num2, num3]) 。如果我们把虚线中的每一个点和空白部分都当作一个部分的话,他们会按照数组里的数传递下去,一直到终点。
比如:
1
2ctx.setLineDash([1,2,3,4])
首先会出现一个单位为1的有色块,接着是单位为2的无色块,接着单位为3的有色块····
例如:
1
2
3
4
5
6
7
8
9
10
11
12<canvas width="500" height="500" id="mycanvas"></canvas>
<script>
canvas = document.getElementById('mycanvas')
let ctx = canvas.getContext('2d')
ctx.beginPath()
ctx.moveTo(0, 50)
ctx.lineWidth = 10
ctx.setLineDash([10, 20, 30])
ctx.lineTo(500, 50)
ctx.stroke()
ctx.closePath()
</script>
对虚线开始位置进行位移使用属性lineDashOffset
lineDashOffset的值如果为正,向左移动,为负向右移动。快在上面的例子中移动试一下吧。
到现在,如何关于图形绘制的各种基本知识我们基本上都学了,下一节开始,我们学习如何在canvas上写字。