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学习小结的更多相关文章

  1. canvas学习之API整理笔记(二)

    前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...

  2. flex学习小结

    接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...

  3. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  4. canvas学习(一)

    Canvas 学习之路 (一) canvas 是H5 里面神一样的东西,使得只是通过html和js就能做出非常棒的游戏和画面. 因为对前端无限的爱好,更加对canvas充满好奇,将我学习canvas的 ...

  5. canvas学习和面向对象(二)

    Canvas 学习(二) 上一篇Canvas 学习(一)中我是用canvas绘制了一些基本和组合的图形. 现在开始绘制图片和动画帧,以及面向对象的升级版本. 还是一样,看代码,所有的代码都托管在git ...

  6. react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

    react学习小结   本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...

  7. objective-c基础教程——学习小结

    objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...

  8. pthread多线程编程的学习小结

    pthread多线程编程的学习小结  pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写     程序员必上的开发者服务平台 —— DevSt ...

  9. ExtJs学习笔记之学习小结LoginDemo

    ExtJs学习小结LoginDemo 1.示例:(登录界面) <!DOCTYPE html> <html> <head> <meta charset=&quo ...

随机推荐

  1. 对于JSONObject,我只是临时抱佛脚

    说起JSON,大家就谈不上陌生了,因为对于数据传输语言,各位只认json,即使有XML语言,但是各位很少用吧.我也是,但是之前用过的json转换工具各种各样,我记忆中有过GSON(google).fa ...

  2. MyBatis介绍

    MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的 XML或注解用于配 ...

  3. Windows 10环境安装VIM代码补全插件YouCompleteMe

    Windows 10环境安装VIM代码补全插件YouCompleteMe 折腾一周也没搞定Windows下安装VIM代码补全插件YouCompleteMe,今天在家折腾一天总算搞定了.关键问题是在于P ...

  4. 通过ant-jmeter读取jtl文件拆分数据并insert DB

    前言:之前详解过通过jmeter生成的csv文件,解析csv存入DB,这个有弊端 第一:需独立创建一个job 第二:需按照一定规范输出 因此,放弃解析csv方式,直接解析自动化生成的原始jtl文件并集 ...

  5. JS组件系列——自己动手扩展BootstrapTable的 冻结列 功能:彻底解决高度问题

    前言:一年前,博主分享过一篇关于bootstrapTable组件冻结列的解决方案  JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案 ,通过该篇,确实可以实现bo ...

  6. 【Android Developers Training】 58. 缓存位图

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. JavaScript开发者必备的10个sublime的插件

    http://www.codeceo.com/article/10-js-sublime-text-plugins.html

  8. Python将数据插入到数据库时遇到单引号插入错误的问题

    这才是真正的解决方法,真不知道有些人连试都没试过就乱转载 比如你要插入一个字符串,是一个变量 如:str = "I'am a handsom boy" 由于这个字符串包含',插入数 ...

  9. js实现类似iphone的秒表-添加平均数功能

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  10. ASP.NET Core 2.0 SignalR 示例

    # 一.前言 上次讲SignalR还是在<[在ASP.NET Core下使用SignalR技术](http://dotnet.ren/2017/02/21/%E5%9C%A8ASP-NET-Co ...