【HTML】canvas学习小结
1. 绘制基本图形
-----上下文----------------------------------------------------------
canvas.getContext('2d') 获取上下文
ctx.save() 保存当前上下文
ctx.restore() 恢复至上次保存的上下文
-----路径 ----------------------------------------------------------
ctx.beginPath() 开始绘制新路径
ctx.closePath() 结束当前路径
ctx.moveTo(x,y) 移动绘制点至x,y
ctx.lineTo(x,y) 从当前点绘制到x,y的线
------样式-------------------------------------------------------------
ctx.fillStyle 设置图形填充的颜色
ctx.strokeStyle 设置图形边框的颜色
-----线条样式 -----------------------------------------------------------
ctx.lineWidth 设置图形边框的宽度
ctx.lineCap 线条末端样式,可为round / butt / sqare
ctx.lineJoin 两条线交汇边角的类型,可为bevel|round|miter
ctx.lineLimit 两线夹角长度,只有当 lineJoin 属性为 "miter" 时,miterLimit 才有效。
-----填充&绘制----------------------------------------------------------
ctx.fill() 填充图形
ctx.stroke() 绘制图形,一般填充在绘制前面,避免填充遮挡宽度
-----转换----------------------------------------------------------
ctx.translate(x,y) 将图形起始坐标移至x,y
ctx.rotate(angle) 将图形旋转angle角度(弧度制)
ctx.scale(x,y) 将图形X轴缩放x倍,Y轴缩放y倍
ctx.transform(a,b,c,d,e,f) 将图形进行矩阵变换,a,b水平缩放、倾斜,c,d垂直倾斜、缩放,e,f水平、垂直移动图形,矩阵变换可叠加
ctx.setTransform(a,b,c,d,e,f) 将图形变换矩阵重置为指定矩阵
1.1 绘制线条
var canvas = document.getElementById('demo');
canvas.width = 800;
canvas.height = 800;
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(100,100);
ctx.lineTo(200,200);
ctx.lineTo(100,300);
ctx.lineWidth = 15;
ctx.lineCap = "round";
ctx.strokeStyle = "#CC0000"; // 设置线的颜色
ctx.lineJoin = "miter"; //两条线交汇边角的类型,可为bevel|round|miter
ctx.lineLimit = 15;//两条线交汇处内角和外角之间的距离,只有当 lineJoin 属性为 "miter" 时,miterLimit 才有效。
ctx.closePath();
ctx.stroke();
1.2 绘制矩形
ctx.rect(x1, y1, x2, y2); 绘制左上角坐标x1,y1 右下角坐标x2,y2的矩形
ctx.fillRect(x1, y1, x2, y2); 绘制左上角坐标x1,y1 右下角坐标x2,y2的填充矩形
ctx.strokeRect(x1, y1, x2, y2); 绘制左上角坐标x1,y1 右下角坐标x2,y2的无填充矩形
ctx.clearRect(x1, y1, x2, y2); 清楚左上角坐标x1,y1 右下角坐标x2,y2的矩形内图像
ctx.rect(0,20,100,100);
ctx.fillStyle = "red";
ctx.fillRect(120,20,100,100);
ctx.strokeStyle = "black";
ctx.lineWidth = 10;
ctx.strokeRect(250,20,300,100);
ctx.fill();
ctx.stroke();
ctx.clearRect(100,50,50,50);//清除某个矩形区域的内容
1.3 绘制圆形&扇形
ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise); x和y参数是圆心坐标,radius是半径,
startAngle和endAngle则是扇形的起始角度和终止角度(以弧度表示),
anticlockwise表示做图时应该逆时针画(true)还是顺时针画(false)
ctx.beginPath();
ctx.lineWidth = 2;
ctx.arc(100,100,50,Math.PI * 0.5,Math.PI * 2,true); ctx.closePath();//不结束路径,就只绘制弧线
ctx.stroke();
1.4 绘制五角星
ctx.beginPath();
for(var i = 0 ; i < 5 ; i ++){
ctx.lineTo(Math.cos((18 + i*72)/180 * Math.PI) * 20,
-Math.sin((18 + i*72)/180 * Math.PI) * 20);
ctx.lineTo(Math.cos((54 + i*72)/180 * Math.PI) * 20 * 0.5,
-Math.sin((54+ i*72)/180 * Math.PI) * 20 * 0.5);
}
ctx.closePath();
1.5 绘制渐变色
createLinearGradient(x1,y1,x2,y2) 绘制从x1,y1起始,x2,y2终止的线性渐变,例如(0,0,0,100)从上至下的线性渐变,(0,0,100,0)从左至右
addColorStop(stop,color) 从stop(介于 0.0 与 1.0 之间的值,表示渐变中开始与结束之间的位置)换颜色渐变
createRadialGradient(x1,y1,x2,y2) 绘制从x1,y1起始,x2,y2终止的线性渐变,例如(0,0,0,100)从上至下的线性渐变,(0,0,100,0)从左至右
var myGradient = ctx.createLinearGradient(0, 0, 500, 0); //从上至下的线性渐变
myGradient.addColorStop(0, "#000");
myGradient.addColorStop(1, "#fff");
ctx.fillStyle = myGradient;
ctx.fillRect(10,10,500,500);
var myGradient = ctx.createRadialGradient(400, 400, 0,400, 400,200); //从上至下的径向渐变
myGradient.addColorStop(0, "#000");
myGradient.addColorStop(1, "#fff");
ctx.fillStyle = myGradient;
ctx.fillRect(10,10,600,600);
1.6 阴影
ctx.shadowOffsetX 阴影距形状的水平距离
ctx.shadowOffsetY 阴影距形状的垂直距离
ctx.shadowBlur 阴影的模糊级别
ctx.shadowColor 阴影的颜色
ctx.shadowOffsetX = 10; // 设置水平位移
ctx.shadowOffsetY = 10; // 设置垂直位移
ctx.shadowBlur = 5; // 设置模糊度
ctx.shadowColor = "rgba(0,0,0,0.2)"; // 设置阴影颜色 ctx.fillStyle = "#CC0000";
ctx.fillRect(10,10,200,100);
1.7 绘制文本
ctx.font 当前字体属性
ctx.textAlign 对齐方式,包括center|end|left|right|start
ctx.textBaseline 当前文本基线 ,包括alphabetic|top|hanging|middle|ideographic|bottom
ctx.fillText() 绘制“被填充的”文本
ctx.strokeText(text,x,y,maxWidth) 绘制文本(无填充),text文本,x,y文本坐标,maxWidth 文本最大宽度
ctx.measureText(text,x,y,maxWidth) 返回包含指定文本宽度的对象
// 在位置 250 创建红色基线
ctx.strokeStyle="red";
ctx.moveTo(250,20);
ctx.lineTo(250,200);
ctx.stroke(); // 创建渐变
var gradient=ctx.createLinearGradient(0,0,800,0);
gradient.addColorStop("0","magenta");
gradient.addColorStop("0.5","blue");
gradient.addColorStop("1.0","red"); ctx.fillStyle = gradient;
ctx.font="30px Arial";
// 显示不同的 textAlign 值
ctx.textAlign="start";
ctx.fillText("textAlign=start",250,60,120); ctx.textAlign="end";
ctx.fillText("textAlign=end",250,90); ctx.textAlign="left";
ctx.fillText("textAlign=left",250,120); ctx.textAlign="center";
ctx.fillText("textAlign=center",250,150); ctx.textAlign="right";
ctx.strokeText("textAlign=right",250,180);
【HTML】canvas学习小结的更多相关文章
- canvas学习之API整理笔记(二)
前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...
- flex学习小结
接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- canvas学习(一)
Canvas 学习之路 (一) canvas 是H5 里面神一样的东西,使得只是通过html和js就能做出非常棒的游戏和画面. 因为对前端无限的爱好,更加对canvas充满好奇,将我学习canvas的 ...
- canvas学习和面向对象(二)
Canvas 学习(二) 上一篇Canvas 学习(一)中我是用canvas绘制了一些基本和组合的图形. 现在开始绘制图片和动画帧,以及面向对象的升级版本. 还是一样,看代码,所有的代码都托管在git ...
- react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)
react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...
- objective-c基础教程——学习小结
objective-c基础教程——学习小结 提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...
- pthread多线程编程的学习小结
pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 —— DevSt ...
- ExtJs学习笔记之学习小结LoginDemo
ExtJs学习小结LoginDemo 1.示例:(登录界面) <!DOCTYPE html> <html> <head> <meta charset=&quo ...
随机推荐
- chip-seq数据分析中peak-calling软件-------MACS的安装
1.下载MACS软件安装包(作者的系统为Ubuntu) 网址链接:http://liulab.dfci.harvard.edu/MACS/ 2.解压文件: tar -zxvf MACS**.tar.g ...
- APUE-文件和目录(七)符号链接
符号链接 符号链接的用途 符号链接是对一个文件的间接指针,它与前面介绍的硬连接不同,硬连接指向文件的i节点.引入符号链接是为了避开硬连接的一些限制: 硬链接通常要求链接和文件位于同一文件系统中. 只有 ...
- JavaScript中的数组
数组 (1).数组的定义 数组是值的有序集合 javascript数组是无类型的:数组元素可以是任意类型,并且同一个数组的不同元素也可能有不同的类型. 每个值叫做一个元素,而每个元素在数组中有一个位置 ...
- JS阻塞以及CSS阻塞
一.JS阻塞 所有的浏览器在下载JS文件的时候,会阻塞页面上的其他活动,包括其他资源的下载以及页面内容的呈现等等,只有当JS下载.解析.执行完,才会进行后面的 操作.在现代的浏览器中CSS资源和图片i ...
- Android的UI调优
对于一个App的UI而言,在流畅性上的改进目标其实就是降低屏幕绘制的延迟,创建流畅和稳定的帧率以避免卡顿. 在理想情况下,全部的测量.布局和绘制的时间最好在16ms以内,这样才能保证屏幕运行的顺畅性. ...
- angularJS loading 载入画面
在请求网络的时候,显示loading画面 1. 使用http的interceptor,截断处理所有的http请求和响应,以及错误.在request的时候设置$rootScope.loading=Tru ...
- 关于MATLAB处理大数据坐标文件2017529
今天我们离成功又近了一步,因为又失败了两次 第一次使用了所有特征,理由:前天的特征使用的是取单个特征测试超过85分的特征,结果出现过拟合现象. 本次使用所有特征是为了和昨天的结果作比较. 结果稍好:比 ...
- 【源码分享】mui实现简单的手机音乐播放器
mui实现简单的手机音乐播放器 最近先来无事,我用mui写了一个可以跨页面控制的音乐播放器.主要功能有上一曲,下一曲,播放,暂停,感兴趣的可以继续看下去. 说的总是不实在,直接上源码,有兴趣的可以读下 ...
- Android 设计模式实战之关于封装计费代码库的策略模式详谈
写在之前 这周生活上出现了很多的不如意,从周一开始就觉得哪里出现了问题,然后就是各种烦躁的情绪,后来事情还真是如预感的那样发生了,很是心痛,但也无可奈何,希望大家都好好珍惜自己身边的人:友人,亲人,家 ...
- js动态参数作为Object的属性取值
js动态参数作为Object的属性取值var myObj = {"a":1,"b":2};var a = 'a';myObj[a] 就可以获取到 属性a的值了