canvas-画线
坐标系统简析
左边是笛卡尔坐标系,右边是canvas坐标系。
笛卡尔坐标系(Cartesian coordinate system):
也称直角坐标系,是一种正交坐标系。二维的直角坐标系是由两条相互垂直、0点重合的数轴组成。
canvas坐标系和web坐标系一致,左上角为原点。
绘制线
代码基础:
var canvas = document.getElementById('j-canvas');if (canvas.getContext) { var ctx = canvas.getContext('2d'); // 在此添加代码}
主要方法:
lineTo()
单纯只用上面一个方法是不能画出线的,需要别的方法配合:
ctx.moveTo(0,10); // 画笔的起点或重新定位画笔 ctx.lineTo(200,10); ctx.stroke(); // 描边
绘制结果,如下:
修饰方法:
lineWidth:默认值 1.0
ctx.lineWidth = number;
lineCap: 线的尾部何种样子
ctx.lineCap = "butt"; // 默认值ctx.lineCap = "round";ctx.lineCap = "square";
如下:
square的尺寸为: lineWidth/2 * lineWidth
lineJoin: 线与线之间如何衔接
ctx.lineJoin = "bevel";ctx.lineJoin = "round";ctx.lineJoin = "miter"; // 默认值
注:round的半径是lineWidth,miter为两条线延伸然后组成一个菱形。
miterLimit:
ctx.miterLimit = value; // 默认值 10.0,(设置为:0, 负值, Infinity and NaN 则忽略)
设置或返回最大斜接长度,斜接长度指的是在两条线交汇处内角和外角之间的距离:
注:只有当 lineJoin 属性为 "miter" 时,miterLimit 才有效。
如果斜接长度超过 miterLimit 的值,边角会以 lineJoin 的 "bevel" 类型来显示(图解 3):
setLineDash():
ctx.setLineDash(segments); // segments 为数组
若数组为:[5,10],设置偶数个数值,[线,空白]交替绘制
线就是5,空白就是10。
如果数组为:[5,10,15],设置奇数个数值,内部会变成 [5,10,15,5,10,15],[线,空白,线,空白,线,空白]
getLineDash():
ctx.getLineDash();
返回一个偶数个数字的数组,若设置的为[5,10],返回则为[5,10];若设置的为[5,10,15],返回则为[5,10,15,5,10,15]。
lineDashOffset:
ctx.lineDashOffset = value;
默认值:0.0,设置线的偏移量,可正(整体逆时针移动),可负(整体顺时针移动)
绘制(Marching ants)
var offset = 0;(function march(){ ctx.clearRect(0,0,canvas.width,canvas.height); ctx.setLineDash([5, 10]); ctx.beginPath(); ctx.lineDashOffset = -offset; ctx.moveTo(10, 40); ctx.lineTo(200, 40); ctx.lineTo(200,100); ctx.lineTo(10,100); ctx.lineTo(10,40) ctx.stroke(); // 增加 offset++; setTimeout(xxx,100)})();
原理:offset每100毫秒增加一个单位,每增加一个单位整体就向右移动一个单位,再配合 clearRect 清除画布,视觉上感觉就是在顺时针移动。
- 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 数组属性和方法
- Yii框架ACF(accessController)简单权限控制操作示例
- tensorflow 动态获取 BatchSzie 的大小实例
- TP5.0框架实现无限极回复功能的方法分析
- Tensorflow之MNIST CNN实现并保存、加载模型
- tensorflow 大于某个值为1,小于为0的实例
- YII框架模块化处理操作示例
- 基于tensorflow for循环 while循环案例
- 浅谈Python 命令行参数argparse写入图片路径操作
- 硬核干货丨游戏大世界的超远视距处理手法,建议收藏!
- python实现npy格式文件转换为txt文件操作
- 从0开始打造UI框架:动态化框架Scrollview物理学算法解析
- 基于Keras的格式化输出Loss实现方式
- PHP信号处理机制的操作代码讲解
- php防止表单重复提交实例讲解
- Python实现封装打包自己写的代码,被python import