了解CanvasRenderingContext2D.lineWidth
简介
CanvasRenderingContext2D.lineWidth
表示线宽。默认值是1.0
。
语法
context.lineWidth = value;
其中:
- value
- 表示线的宽度。数值类型,默认值是
1.0
。如果是负数,0,NaN
,或者Infinity
都会忽略。
测试
1. 默认值测试
我们可以测试下,如下代码:
console.log(document.createElement('canvas').getContext('2d').lineWidth); // 结果是1。
但是,有时候,我们不设置lineWidth值的默认效果会出乎我们的意料,例如我们执行如下JS:
context.strokeRect(20, 20, 200, 80);
结果在1倍屏幕下显示效果却是如下右侧截图效果——宽度显示为2像素:
实时效果 | 截图效果 |
---|---|
win7 Chrome68
![]() |
这是什么原因呢?对于strokeRect
描边,你可以想象成是居中描边,一条看不见的线两侧描边。由于1倍显示屏幕最小宽度就是1像素,不够分,于是浏览器就想了个方法,边缘柔化,于是,我们看上去是2px,实际上是按照1像素的线渲染的,线的颜色为灰色也是因为边缘柔化导致。如果我们的线宽度设置成0.5
,结果会发现线的颜色更淡了。
如果我们只是普通的路径描边,则1像素是可以正常黑色显示的(可参见案例中的1像素描边)。
2. 特殊属性值测试
点击不同的选项,查看绘制的直线的表现。
其中只有第3个单选是合法值,其他任何数值选中,画布中的线条宽度都不会有任何变化,因为这条语句直接被忽略了。
案例
绘制一个1像素宽的随机三角形。
<canvas width="240" height="120"></canvas>
// 随机三角形 var canvas = document.querySelector('canvas'); var context = canvas.getContext('2d'); var width = canvas.width; var height = canvas.height; // 随机三个坐标点 var positionA = [width * Math.random(), height / 2 * Math.random()]; var positionB = [width / 2 * Math.random(), height / 2 + height / 2 * Math.random()]; var positionC = [width / 2 + width / 2 * Math.random(), height / 2 + height / 2 * Math.random()]; // 开始绘制 context.beginPath(); context.moveTo(positionA[0], positionA[1]); context.lineTo(positionB[0], positionB[1]); context.lineTo(positionC[0], positionC[1]); context.closePath(); // 绘制,由于默认宽度就是1像素,因此 // context.lineWidth设置缺省 context.stroke();
实时效果如下:
其他
规范文档
规范地址 | 规范状态 | 备注 |
---|---|---|
HTML现行标准 这个规范中定义了'CanvasRenderingContext2D.lineWidth' |
现行标准 | - |
相关资源
暂无
兼容性
IE9+支持,全兼容。
by zhangxinxu 2019-10-18 01:44:05