Canvas Demo 1

先看图:


这个例子有三个个细节,请细看第一个path:

1. 横线的lineCap不是round,而竖线是round

2. 竖线比横线粗一倍

3. lineJoin是个直角(也许你不觉得这是什么问题,继续往下看吧)


关键的处理在于moveTo(x, y):

1. 只要保证x是0,横线的lineCap就是butt。如果移到(50, 50),那两条线都是round了

2. 只要保证y是0,竖线就会比横线粗一倍,因为lineWidth属性是以绘制的像素线为中心线的,比如从(0,10)画到(10, 10),这条线就是中心线(不计粗细),如果lineWidth为10,那就上下各分得5px。例子中第一个path的横线y坐标为0,所以被截断了一半。

3. 同样的道理,lineJoin也被截断了
 
Canvas Demo 1

画法:先按 lineWidth=50 和黑色进行 stroke(),再按 lineWidth=1 和白色在相同的路径进行stroke(),可得如下结论:

1. lineCap属性表示从结束点向外延伸的样式,我们的x坐标从0开始的话,0坐标的部分(也就是向外延伸的部分)是看不见的,不论设置成什么值,看起来都是butt

2. lineJoin为bevel时,白色线相交点和斜角的两端可构成一个直角三角形,所以就出现了本例中 y为0时,完全看不到斜角的情况


代码如下:

context.lineWidth  = 10;

context.lineJoin  = 'bevel';

context.lineCap  = 'round';

context.beginPath();

context.moveTo(0, 0);

context.lineTo(25, 0);

context.lineTo(25,25);

context.stroke();

context.closePath();



context.beginPath();

context.moveTo(10, 50);

context.lineTo(35, 50);

context.lineTo(35,75);

context.stroke();

context.closePath();



context.lineJoin  = 'round';

context.lineCap = 'butt';

context.beginPath();

context.moveTo(10, 100);

context.lineTo(35, 100);

context.lineTo(35,125);

context.stroke();

context.closePath();

你可能感兴趣的:(canvas)