setLineDash() 绘制虚线

2018-10-22 00:05| 作者: admin| 查看: 3581| 评论: 0|来自: 蚂蚁部落

默认状态下,线条都是实心的,当然也可以绘制虚线线条。

canvas自身提供了实现此效果的方法。

语法结构:

[JavaScript] 纯文本查看 复制代码
ctx.setLineDash(segments);

参数解析:

(1).segments:必需,一个数组,存储虚线长度与虚线间距的数组。

此方法的难点在于数组参数的具体含义,下面会通过代码实例详细介绍。

浏览器兼容:

(1).IE9+浏览器支持此方法。

(2).edge浏览器支持此方法。

(3).谷歌浏览器支持此方法。

(4).火狐浏览器支持此方法。

(5).Opera浏览器支持此方法。

(6).Safari浏览器支持此方法。

代码实例如下:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
canvas{
  background-color: #ccc;
}  
</style>  
<script>
window.onload = function () {
  let cvs = document.getElementById("canvas");
  let ctx = cvs.getContext('2d');
  ctx.setLineDash([5, 25]);
  ctx.beginPath();
  ctx.moveTo(0, 100);
  ctx.lineTo(240, 100);
  ctx.strokeStyle="red";
  ctx.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="400" height="200"></canvas>
</body>
</html>

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/22/000623x3336u9fu159br39.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

setLineDash方法规定虚线的特征,它的参数是一个具有两个元素的数组。

第一个数组元素规定虚线尺寸,也就是我们可见的部分,比如上面的红色小线段。

第二个数组元素规定虚线与虚线之间的间隔,通过线段与间隔交替出现,构成了一个完整的虚线。

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
canvas{
  background-color: #ccc;
}  
</style>  
<script>
window.onload = function () {
  let cvs = document.getElementById("canvas");
  let ctx = cvs.getContext('2d');
  ctx.setLineDash([5, 15, 25]);
  ctx.beginPath();
  ctx.moveTo(0, 100);
  ctx.lineTo(240, 100);
  ctx.strokeStyle="red";
  ctx.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="400" height="200"></canvas>
</body>
</html>

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/22/000702e0m7x4j2j4fd2drl.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

在上述代码中,setLineDash方法具有三个参数。

第一个参数用于规定第一个虚线的长度。

第二个参数用于规定第一个虚线与第二个虚线之间的间隔。

第三个参数用于规定第二个虚线的长度。

大家有没有感觉到有点不对劲的地方,我们规定了两条虚线,但是只有一个间隔,这样的话就无法正常循环绘制任意长度的虚线,因为总有虚线与虚线之间的间隔是无法确定的,解决方案如下:如果数组元素数量是奇数,那么数组元素复制一份,让它变成偶数,所以上述代码等同于:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
canvas{
  background-color: #ccc;
}  
</style>  
<script>
window.onload = function () {
  let cvs = document.getElementById("canvas");
  let ctx = cvs.getContext('2d');
  ctx.setLineDash([5, 15, 25,5, 15, 25]);
  ctx.beginPath();
  ctx.moveTo(0, 100);
  ctx.lineTo(240, 100);
  ctx.strokeStyle="red";
  ctx.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="400" height="200"></canvas>
</body>
</html>

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/22/000735wrrrzoxnhq1vy5dt.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到setLineDash参数值是[5, 15, 25,5, 15, 25]的时候与是[5, 15, 25]时候运行效果完全相同。

也就是只有当数组元素数量为偶数的时候,才能做到虚线与间隔真正做到一一配对,一个虚线一个间隔,这样才能够循环往复,绘制任意长度的虚线。当然虚线并不是只作用于直线,也可以作用域其他形状图案,比如矩形等,本文不再进行演示。


鲜花

握手

雷人

路过

鸡蛋
上一篇:canvas strokeStyle下一篇:canvas 虚线矩形
返回顶部