上文,写完弧度与贝塞尔曲线[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具),本文主要是关于线条的样式设置

lineWidth: 设置线条的宽度,值是一个数值,如lineWidth = 5.

画3条不同宽度的线条:

 <style>
body {
background: #000;
}
#canvas {
background: white;
}
</style>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'); oGc.beginPath();
oGc.lineWidth = 5;
oGc.strokeStyle = 'red';
oGc.moveTo( 200, 100 );
oGc.lineTo( 600, 100 );
oGc.stroke(); oGc.beginPath();
oGc.lineWidth = 10;
oGc.strokeStyle = 'orange';
oGc.moveTo( 200, 300 );
oGc.lineTo( 600, 300 );
oGc.stroke(); oGc.beginPath();
oGc.lineWidth = 20;
oGc.strokeStyle = '#09f';
oGc.moveTo( 200, 500 );
oGc.lineTo( 600, 500 );
oGc.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>

lineWidth设置弧形的宽度:

 <style>
body {
background: #000;
}
#canvas {
background: white;
}
</style>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'); oGc.lineWidth = 10;
oGc.arc( 300, 300, 200, 0, 270 * Math.PI / 180, false );
oGc.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>

这段圆弧设置了lineWidth, 那么他的半径就等于lineWidth + 原来的半径

lineCap设置线条开始与结尾的线帽样式,有3个值

1,butt: 这是默认值,不加任何样式

2,round: 圆形

3,square: 正方形

 <style>
body {
background: #000;
}
#canvas {
background: white;
}
</style>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'); oGc.lineWidth = 100;
oGc.beginPath();
oGc.strokeStyle = 'red';
oGc.lineCap = 'butt';
oGc.moveTo( 200, 100 );
oGc.lineTo( 600, 100 );
oGc.stroke(); oGc.beginPath();
oGc.strokeStyle = 'orange';
oGc.lineCap = 'round';
oGc.moveTo( 200, 300 );
oGc.lineTo( 600, 300 );
oGc.stroke(); oGc.beginPath();
oGc.strokeStyle = '#09f';
oGc.lineCap = 'square';
oGc.moveTo( 200, 500 );
oGc.lineTo( 600, 500 );
oGc.stroke(); oGc.beginPath();
oGc.lineWidth = 1;
oGc.strokeStyle = '#ccc';
oGc.moveTo( 200, 0 );
oGc.lineTo( 200, oCanvas.height );
oGc.stroke(); oGc.beginPath();
oGc.moveTo( 150, 0 );
oGc.lineTo( 150, oCanvas.height );
oGc.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>

如果设置了线帽的样式( square, round ),线条就会加长,长出了多少?我在图中作了两条参考线,线条两边多出来的长度是线宽的一半。着这里就是 50,就是lineWidth=100的一半.

利用 lineWidth和lineCap属性写一个字母Z

 <style>
body {
background: #000;
}
#canvas {
background: white;
}
</style>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'); oGc.lineWidth = 30;
oGc.lineCap = 'round';
oGc.moveTo( 100, 100 );
oGc.lineTo( 300, 100 );
oGc.lineTo( 100, 300 );
oGc.lineTo( 300, 300 );
oGc.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>

你会发现,只有两个地方有lineCap样式,线的开始点和结束点。线条的连接处并没有加上lineCap样式

canvas为我们提供了lineJoin方法,可以设置线的连接处的样式,有3个值:

miter: 默认值,尖角

round: 圆角

bevel: 斜角

 oGc.lineWidth = 30;
oGc.lineCap = 'round';
oGc.lineJoin = 'round';
oGc.moveTo( 100, 100 );
oGc.lineTo( 300, 100 );
oGc.lineTo( 100, 300 );
oGc.lineTo( 300, 300 );
oGc.stroke();

加上lineJoin = 'round' 就会变成圆角效果:

miter效果:

bevel效果

画虚线:

我们之前用moveTo, lineTo画的都是实线,canvas为我们提供了setLineDash()方法,它可以用来画虚线:

用法:

cxt.setLineDash( 数组 )

参数中这个数组,是由实线和空白组合合成,如:

[ 20, 5 ]: 20px 实线,5px空白

[ 20, 5, 10, 5]: 20px实线,5px空白, 10px实线, 5px空白

重复拼凑组合而成的线型.

 <style>
body {
background: #000;
}
#canvas {
background: white;
}
</style>
<script>
window.onload = function () {
var oCanvas = document.querySelector("#canvas"),
oGc = oCanvas.getContext('2d'); oGc.lineWidth = 5;
oGc.strokeStyle = '#09f';
oGc.beginPath();
oGc.setLineDash( [ 10, 5 ] );
oGc.moveTo( 100, 100 );
oGc.lineTo( 600, 100 );
oGc.stroke(); oGc.beginPath();
oGc.setLineDash( [ 20, 5, 10, 5 ] );
oGc.moveTo( 100, 150 );
oGc.lineTo( 600, 150 );
oGc.stroke(); oGc.beginPath();
oGc.setLineDash( [ 40, 5, 20, 5, 10, 1 ] );
oGc.moveTo( 100, 200 );
oGc.lineTo( 600, 200 );
oGc.stroke();
}
</script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>

[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)的更多相关文章

  1. [js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)

    接着上文线条样式[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)继续. canvas提供两种输出文本的方 ...

  2. [js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)

    接着上文[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)继续,本文介绍的 ...

  3. [js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API

    我们接着上文[js高手之路] html5 canvase系列教程 - 认识canvas以及基本使用方法继续. 一.直线的绘制 cxt.moveTo( x1, y1 ): 将画笔移动到x1, y1这个点 ...

  4. [js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具)

    之前,我写了一个arc函数的用法:[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形). arcTo: cxt.arcTo( cx, cy, x2, y2, ...

  5. [js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)

    绘制曲线,经常会用到路径的知识,如果你对路径有疑问,可以参考我的这篇文章[js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解. arc:画 ...

  6. [js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)

    接着上文[js高手之路] html5 canvas系列教程 - 状态详解(save与restore),相信大家都应该玩过美颜功能,而我们今天要讲的就是canvas强大的像素处理能力,通过像素处理,实现 ...

  7. [js高手之路] html5 canvas系列教程 - 状态详解(save与restore)

    本文内容与路径([js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解)是canvas中比较重要的概念.掌握理解他们是做出复杂canvas动 ...

  8. [js高手之路] html5 canvas系列教程 - 线形渐变,径向渐变与阴影设置

    接着上文[js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)继续. 一.线形渐变 线形渐变指的是一条直线上发生的渐变. 用法: var linear ...

  9. [js高手之路] html5 canvas动画教程 - 实时获取鼠标的当前坐标

    有了前面的canvas基础之后,现在开始就精彩了,后面写的canvas教程都是属于综合应用,前面已经写了常用的canvas基础知识,参考链接如下: [js高手之路] html5 canvas系列教程 ...

随机推荐

  1. 使用 Gitbook 打造你的电子书

    本文详细讲解了 Gitbook 生成电子书的完整过程,内容包括:安装.命令.配置.文档结构.生成电子书.部署. 限于篇幅,本文不介绍任何 Gitbook 定制化页面的内容. 想看看 Gitbook 在 ...

  2. spring基于注解进行注入(个人记录)

    spring的Bean基于注解进行配置,再结合自动装配属性,也就DI,其实说白了就相当于初始化的时候给对象赋初值. 配置文件的过程有些麻烦,记录一下. 基于注解进行配置: 1.在application ...

  3. vue.js基础知识篇(5):过渡、Method和Vue实例方法

    第8章:过渡 1.CSS过渡 2.JavaScript过渡 3.渐进过渡 第9章:method Vue.js的事件一般通过v-on指令配置在HTML中,虽然也可以在js的代码中使用原生的addEven ...

  4. [2014-11-02]为EF6+Mysql+CodeFirst启用Migration

    刚为一个EF6 CodeFirst项目启用了Migration,记几个注意点. 启用方法 在Nuget控制台使用以下命令启用Migration Enable-Migrations #此时生成当前数据库 ...

  5. kettle使用正则表达式动态获取excel表

  6. Ubuntu部署可视化爬虫Portia2.0环境

    部署portia环境官方文档给出的方法太过简单,对于初学者来说是很难根据那一两行字成功部署portia环境的.对于部署portia这只可爱的爬虫的过程还是有很多坑的,主要写一篇portia2.0版本的 ...

  7. wowza拉流和推流接口备忘

    拉流接口地址:https://www.wowza.com/docs/stream-management-query-examples# 推流接口地址:https://www.wowza.com/doc ...

  8. stylus选中hover元素的兄弟元素下的子元素

    stylus设置兄弟元素样式:鼠标浮动在 .video-li 元素上时,.video-li 兄弟中 .video-info 下的 .word 显示. .video-li &:hover ~ . ...

  9. 【全面总结】js获取元素位置大小

    [js获取元素位置+元素大小]全面总结 目录 1.关于offset offsetParent(只读) offsetTop(只读) offsetLeft(只读) offsetHeight(只读) off ...

  10. 使用JavaScript循环嵌套解决各种图形

    [循环嵌套的规律]    1.外层循环控制行数,内层循环控制每行中元素的个数. [图形题思路]    1.确定图形有几行,行数即为外层循环次数:    2.确定每行中有几种元素组成,有几种元素表示有几 ...