上文,写完弧度与贝塞尔曲线[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. VS2015 安装nuget离线包nupkg文件

    最近在做项目进度管理时,想通过安装net.sf.mpxj-for-csharp包读取.mpp格式文件,通过Nuget在线安装时,出现以下情况,无法安装,故开启离线安装道路. 离线安装步骤如下: 一.下 ...

  2. [Caffe]史上最全的caffe安装过程

    Linux下的GPU版Caffe安装方法 系统环境:Ubuntu 14.04LTS + NV TitanX 1.1 (可选)显卡驱动的安装(有风险) 如果需要重装,需要先卸载已有版本 sudo apt ...

  3. Django编写RESTful API(三):基于类的视图

    欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装 ...

  4. 在Intellij IDEA中使用Debug

    Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化.通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方 ...

  5. quartz.net使用(通过配置文件进行配置)

    在项目Nuget包管理器中搜索:quartz,安装完成之后再项目中引用即可 先定义一个Job,需要实现IJob接口: public class TestJob : IJob { public void ...

  6. 如何快速的理解JavaScript闭包?

    先看问题 1. 在js中的作用域是什么? 作用域就是作用范围,作用空间.作用域分为全局作用域和局部作用域.(这个东西大家都明白) 如果把局部作用域比作一个国家,那么全局作用域就是地球,地球上除了那个国 ...

  7. h5的video标签

    在video标签中,我们可以使用属性:videoWidth & videoHeight,它获取的是video的宽度和高度(媒体本身). 虽然不能直接使用,但是可以通过计算宽高比得到 video ...

  8. block的定义及使用

    (1)最基础的用法案例,我们可以把block理解为一段类似变量一样的可执行函数代码片段: void (^printBlock)(NSString *x); printBlock = ^(NSStrin ...

  9. RAISERROR

    RAISERROR 可以抛出一个错误,并被程序捕获,在存储过程经常使用: 是否进入Catch代码执行区域,在于错误严重等级设置 RAISERROR ('无效数据', 11 , 1) 第一个参数:自定义 ...

  10. tween.js的使用

    前面的话 TweenJS提供了一个简单但强大的渐变界面.它支持渐变的数字对象属性&CSS样式属性,并允许链接补间动画和行动结合起来,创造出复杂的序列.本文将详细介绍tween.js的使用 概述 ...