Canvas 使用指南

JavaScript09

Canvas 使用指南,第1张

canvas 的能力是通过 context 对象表现出来的,context一般称为绘图环境。

DOMString 为 "2d" 时,context 是 CanvasRenderingContext2D 对象;(本文重点)

DOMString 为 "webgl" 时,context 是 WebGLRenderingContext 对象;

DOMString 为 "webgl2" 时,context 是 WebGL2RenderingContext 对象;

DOMString 为 "bitmaprenderer" 时,context 是 ImageBitmap 对象;

CanvasRenderingContext2D 对象实例 instance 共有16个属性,只要设置了这些属性,就会影响 instance 调用绘制方法时的表现,常用的有:

注意:可使用 instance 的 save() 和 restore() 方法来临时修改 instance 的属性

1、一般用来保存数据,不展示在浏览器页面上,创建的两种方式:a、css 方式设置为 display:none;b、JS创建 document.createElement('canvas');

2、与HTML结合使用:可以采用 CSS 定位的方式,将 HTML 元素置于 canvas 元素之上,比如:在 canva 上叠加一个 div panel 作为某个开关控制界面;选景橡皮筋;时钟等

3、也可使用两个 canvas,一个用来显示,另一个用来做数据准备和处理,这种方式通常效率高,但比较耗费内存

1、准备一个绘制背景的函数,用于每次擦除上一次绘制的结果

2、绘制辅助线

3、监听事件,做坐标转换 windowToCanvas

4、绘制内容的保存于恢复

5、三事件

onmousedown:保存初始 canvas 绘制状态

onmousemove: 更新位置信息,并不断调用初始 canvas 绘制状态来擦除上一个绘制

onmouseup: 调用初始 canvas 绘制状态来擦除上一个绘制,并根据onmousemove保存的信息做最终绘制,将结果绘制在 canvas 上

fillStyle 和 strokeStyle 可以是任意有效的css颜色值或者渐变色以及图像Pattern

canvas 某一时刻只能有一条路径存在,这条路径可以包含多条子路径。用 beginPath 来开始一条新路径或清除上一次子路径

textAlign: left,center,right

textBaseline: top,middle,bottom

1、三属性 font,textAlign,textBaseline

2、三方法 strokeText, fillText, measureText

strokeText(text,x,y,maxWidth) 指定文本超过maxWidth会被缩放

measureText(text).width 返回指定文本宽度

3、水平垂直居中

注意每次变换前,用 save 和 restore 来保存原来绘制上下文

1、由路径定义的一片区域,如一个三角形,矩形,圆形,然后调用 clip 即可得到剪辑区域

2、默认和 canvas 大小一致

3、设置剪辑区域后,浏览器将只对该区域进行绘制

4、调用clip会把剪辑区域设为当前剪辑区域与当前路径定义的区域的交集,故clip 的调用经常在 save 和 restore 之间,这是为了防止剪辑区域越来越小

主要是 drawImage,getImageData,putImageData,createImageData 四个 API

因为主要是手机浏览器的性能问题,十几K的小图片是没问题的,如果大图,就容易卡住。

遇到同样的问题,目前能想到的是先上传到服务器,然后返回一个服务器端的图片url地址。

之前做一个canvas剪切图片的,canvas 生成的图片,我是通过js保存起来,因为js跨域的问题,图片是获取不到的,所以还是要保存在服务器上。