Canvas系列(4):线条操作
通过前三章的学习,你几乎可以绘制出任何图形了,但是却不会画一条虚线,也是够惨的。今天的内容很简单,只简绍3个属性和1个方法,准备好了吗?
线条的粗线
lineWidth
是改变线条的粗线的,默认是一个像素:
context.beginPath();
context.moveTo(20, 50);
context.lineTo(280, 50);
context.lineWidth=1;
context.stroke();
// 如果这里没有beginPath 你猜猜这三条线的宽度分别是多少
context.beginPath();
context.moveTo(20, 75);
context.lineTo(280, 75);
context.lineWidth=5;
context.stroke();
context.beginPath();
context.moveTo(20, 100);
context.lineTo(280, 100);
context.lineWidth=10;
context.stroke();
结果如下:
如果上面没有beginPath
那么后面线描边的时候也会把之前的绘制一下,那么三条先最终的宽度就都是10了。
lineWidth
也可用于矩形和圆弧上,只要画线的地方都可以,如下:
context.beginPath();
context.rect(20, 20, 60, 60);
context.lineWidth=20;
context.stroke();
结果如下:
我们可以看到改变lineWidth
,矩形的大小也变了,目前的宽度是矩形的宽度 + lineWidth
(左边多了一半,右边也多了一半)。
线帽样式
线帽样式由lineCap来定义,它有三个值butt | round | square
分别对应无线帽 | 圆角 | 方形
,默认是butt
(无线帽),如下:
context.beginPath();
context.moveTo(20, 50);
context.lineTo(280, 50);
context.lineWidth=10;
context.lineCap='butt';// 无线帽 默认值
context.stroke();
context.beginPath();
context.moveTo(20, 75);
context.lineTo(280, 75);
context.lineWidth=10;
context.lineCap='round'; // 圆角
context.stroke();
context.beginPath();
context.moveTo(20, 100);
context.lineTo(280, 100);
context.lineWidth=10;
context.lineCap='square'; // 方形
context.stroke();
结果如下:
线帽样式对于越宽的线条效果越明显,所以上面线宽给了一个10。同时可以看到线帽给的不一样,宽度其实也是有点不同的。 线帽只是对线条2端点的样式做了处理,如果是线条中间的那么就不生效了:
context.beginPath();
context.moveTo(100, 50);
context.lineTo(200, 50);
context.lineTo(200, 100);
context.lineWidth=20;
context.lineCap='round';
context.stroke();
结果如下:
如果要改变中间的样子那该怎么办?那么就是用lineJoin
。
线条交界处样式
线条交界处样式由lineJoin
来决定,它有三个值miter | bevel | round
分别是尖角 | 斜角 | 圆角
,默认是miter
。斜角时如下:
context.beginPath();
context.moveTo(100, 50);
context.lineTo(200, 50);
context.lineTo(200, 100);
context.lineWidth=20;
context.lineCap='round';
context.lineJoin='bevel';
context.stroke();
结果如下:
如果context.lineJoin='bevel';
改为context.lineJoin='round';
时,结果如下:
绘制虚线
虚线是由细小的实线和空白组成,绘制虚线使用setLineDash
方法,它接收一个数组作为参数,数组是实线和空白的长度:
context.beginPath();
context.arc(150, 75, 60, Math.PI / 180 * 0, Math.PI / 180 * 360);
// 实线和空白比例是10px : 5px
context.setLineDash([10,5]);
context.stroke();
结果如下:
值的一提的是,如果不传数组的话,那么就会报错;传一个空数组的话,会按照实线去绘制;如果数组只有一个元素的话,那么就是实线和空白依次按这个元素大小来绘制;如果多个元素的时候就是交替循环来间隔。
- c# asp.net 实现分页(pager)功能
- 一次数据库无法登陆的"问题"及排查(r2第11天)
- popcorn-js视频Video框架简单用法
- 一次数据库响应缓慢的问题排查(r2第9天)
- 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求
- C# 读取指定文件夹下所有文件
- ASP.NET 实现Base64文件流下载PDF
- MVC自定义视图引擎地址
- JS禁止鼠标右键、禁止全选、复制、粘贴的方法(所谓的防盗功能)
- impdp异常中断导致的问题(r2第8天)
- 利用autocomplete.js实现仿搜索效果(ajax动态获取后端[C#]数据)
- sql语句的简化(r2第7天)
- Ajax jsonp 跨域请求实例
- asp.net动态解析用户控件(UserControl)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中在防火墙中开启80端口方法示例
- Apache 获取真实ip的配置的实现方法
- Linux下文件的切分与合并的简单方法介绍
- ubuntu 系统上为php加上redis 扩展的实现方法
- deepin linux 手动升级内核的方法
- UGL之单色位图
- Linux网络启动问题:Device does not seem to be present解决办法
- UGL之透明位图
- 关于ISR
- python 井字棋-文字版(下)
- Linux下nginx生成日志自动切割的实现方法
- Centos 7.2中双网卡绑定及相关问题踩坑记录
- Linux双网卡绑定实现负载均衡详解
- 单台服务器中利用Apache的VirtualHost如何搭建多个Web站点详解
- linux系统下MongoDB单节点安装教程