现把canvas的知识点总结如下,以便随时查阅。: v. d7 i% t& ~. l; _
1、填充矩形 fillrect(x,y,width,height);
" V2 Y3 k$ ~0 M0 W0 z. G( B4 q( l2、绘制矩形边框 strokerect(x,y,width,height);
8 ]- c; \# e, V2 l$ c6 M3、擦除矩形 clearrect(x,y,width,height);/ ]. t8 V8 N" s# C
4、填充样式 fillstyle=red; 样式可以为颜色、渐变和图像。
& w' J. z, v }3 S5、描边样式 strokestyle=red;
: \9 b8 D% e% t' y! i3 y. w) ~6、描边线条的宽度 linewidth=4;
( L' K% G9 S5 D+ c! w7 _) J# O7、线条末端形状 linecap=butt; butt(对接)/round(圆)/square(方),默认情况下是butt;3 W/ Z1 C: I: J% V! j2 z/ S
8、线条相交样式 linejoin=miter; miter(尖角)/round(圆角)/bevel(斜角),默认尖角;- C3 Y; {+ e$ \7 W
9、开始绘制路径 beginpath();
8 i5 J3 u2 l& {$ U/ ^4 Q+ o9 g10、结束路径 closepath(); 创建路径后,如果想绘制一条连接到路径起点的线条,可以调用closepath();
8 U/ D( K$ I+ U/ f6 o% ?9 ~11、绘制圆弧 arc(x,y,radius,startangle,endangle,true/false);
8 B1 ]" j% M# c. s1 {12、绘制弧线 arcto(x1,y1,x2,y2,radius) 从上一点开始绘制一天弧线,到x2,y2为止,并且以给定的半径radius穿过x1,y1;4 {4 D" r3 j' m: [, s
13、moveto(x,y); 将绘图游标移动到(x,y),不画线: j6 l4 d `) q: D1 i
14、lineto(x,y); 从上一点开始绘制一条直线# s1 j4 d# K3 v2 b
15、二次贝塞尔曲线: quadraticcurveto(cx,cy,x,y); 从上一点开始绘制二次曲线,到x,y为止,cx,cy作为控制点。2 D" M6 d3 N$ {
16、三次贝塞尔曲线: beziercurveto(cx1,cy1,cx2,cy2,x,y); 从上一点开始绘制二次曲线,到x,y为止,cx1,cy1和cx2,cy2作为控制点。
. A6 y$ I; d) D& O0 q17、rect(x,y,width,height);从点x,y开始绘制矩形,宽度和高度分别由width和height指定。这个方法绘制的是矩形路径,而不是独立形状。/ y8 ]9 ]% `9 g! k2 R
18、绘制文本:5 t1 e4 C& {4 x) F2 N9 A- h% ^# ^1 p
(1) 填充文本:filltext(hello,x,y,width);width为可选的最大像素宽度,如果文本大于最大宽度,则文本会收缩以适应最大宽度。
/ z4 k. k2 T0 w7 ?5 U(2) 文本描边:stroketext(hello,x,y,width);width为可选的最大像素宽度。
1 V6 j W$ U; i1 q& E(3) 文本样式:font=bold 14px arial;/ N* A& i1 u5 K: n- S3 H
(4) 水平文本对齐:textalign='start'; // start, end, left,right, center。默认值:start。以文字的起始点(x,y)为基点的纵轴进行对齐。+ W* i+ h" h* B
(5) 垂直文本对齐:textbaseline='alphabetic'; //top, hanging, middle,alphabetic, ideographic, bottom。默认值:alphabetic。以文字的起始点(x,y)为基点的横轴进行对齐。3 p/ @7 u7 Y/ I! ]. l
(6) 文本的宽度:var text=hello; var length=context.measuretext(text);参数text为所需要绘制的文字
. K% j( d6 e8 D# S5 a. u. A! c9 v) g; ^19、变换
9 n7 R+ w) c% l( u$ {(1) rotate(angle):围绕原点旋转图像angle弧度。
' n2 z9 @& [) b也可以使用transform(math.cos(angle*math.pi/180),math.sin(angle*math.pi/180),-math.sin(angle*math.pi/180),math.cos(angle*math.pi/180),0,0);
& x5 `, G% g9 I" r) K7 p(2) scale(x,y):缩放图像。也可以使用transform(x,0,0,y,0,0);8 H, u, k; p+ f$ Z) H/ m: p/ Y, X: k
(3) translate(x,y):将坐标原点移动到x,y,执行这个变换之后,坐标0,0会变成之前由x,y表示的点。也可以使用transform(1,0,0,1,x,y);8 @9 l. z5 z$ h2 T6 v
(4) transform(<number>, <number>, <number>,<number>,x, y);
+ B* C! {3 f/ r(5) settransform(<number>, <number>, <number>,<number>,x, y);将变换矩阵重置为默认状态,然后再调用transform();
6 ~( f3 U q8 I5 |7 G20、图形组合
/ N0 O' t) r# w! Q. g代码如下:, o% V/ h% F- t% {
context.fillstyle=blue;
+ Q. ]# E! k' H$ Ocontext.fillrect(10,10,100,100);
1 g9 Y" s. P9 _1 I- u) M1 Q" ucontext.globalcompositeoperation='lighter'; 可选值如/* */内。- C: f; f8 P h
context.fillstyle=red;7 e3 m& U. H/ |% R' u3 P* y e
context.arc(110,60,50,0,math.pi*2,false);( e$ y+ I. z* Q# c; O3 \
context.fill();; `$ G6 t' {- o, V- p
/** F9 M9 _( t, O7 C
source-over(默认值):
+ P( f0 h# B- Q3 m" L: \; S8 jdestination-over:在原有图形之下绘制新图形8 }0 m2 v, D6 U6 ]3 S8 \$ h7 t! d
source-in:新图形与原有图形作in运算,只显示新图形中与原有图形相重叠的部分
x% t T1 d% k, Rdestination-in:原有图形与新图形作in运算,只显示新图形中与原有图形相重叠的部分
, V. ?5 c. w: k0 \7 W- Lsource-out:新图形与原有图形作out运算,只显示新图形中与原有图形不重叠的部分
; S7 g. o1 T0 R [, wdestination-out:新图形与原有图形作out运算,只显示新图形中与原有图形不重叠的部分" Y# ]% [1 Z2 e
source-atop:只绘制新图形中与原有图形重叠的部分和未被重叠的原有图形
( J0 |4 [* c5 t5 Z) g l; I6 m# Ddestination-atop:只绘制原有图形中被新图形重叠的部分和新图形的其他部分3 H4 g1 B# j# T8 f9 d, w
lighter:原有图形与新图形均绘制,重叠部分做加色处理+ y1 U X# Q+ ]2 y$ |3 \
xor:只绘制新图形与原有图形不重叠的部分,重叠部分变透明
9 a6 F, ~( v& T' _# Y* g3 ccopy:只绘制新图形+ f4 s8 o9 `' |6 t
*/
/ R* y1 d# Y2 W6 M4 ?21、绘制图形阴影
( D l0 T' Q. F3 x" ?2 h代码如下:
/ Q1 n" N9 [3 Z. \+ I% Q: hcontext.shadowoffsetx=10; //阴影的横向位移量! u, X4 `5 x) B2 m0 k" v0 C
context.shadowoffsety=10; //阴影的纵向位移量
- | K& ]' X0 Econtext.shadowcolor='rgba(100,100,100,0.5)'; //阴影的颜色: Q. h$ d; z5 X6 L% N9 `
context.shadowblur=7; //阴影的模糊范围" j0 G( M. E5 C) U! T
22、绘制、平铺、裁剪图像8 W4 c/ }8 E0 R" G( A
代码如下:
6 S0 n2 |# @* H0 x( |5 J8 Dcontext.drawimage(image,x,y);
/ h, w3 e1 [: s" q5 [context.drawimage(image,x,y,w,h);
7 i H3 V I! n5 c* n. w8 acontext.drawimage(image,sx,sy,sw,sh,dx,dy,dw,dh);sx,sy和sw,sh为源图像的被复制区域的起始坐标和高度,dx,dy和dw,dh为复制后的区域的目标坐标和高度。! e; V& I) w5 F. d! i
context.createpattern(image,type);图像平铺,参数可以为:no-repeat,repeat-x,repeat-y,repeat;
. Z# q1 @ x9 H: L* K) lcontext.clip(); //裁剪功能0 ~; ]# O" F# O. j+ R5 R/ m& P
例子:
+ d9 s" J+ \/ }: w$ n2 p! W代码如下:
! i% G& r( T2 A- eimage=new image(); //创建image对象
7 V8 W' W/ o- u# D+ Vimage.src=../images/wukong.gif;
, l. B: Y5 s* C0 N, D2 @var test=context.createpattern(image,'repeat-y');//createpattern设置平铺效果,; i3 n8 G9 z8 p" H* N1 z4 Y5 D4 Z
context.fillstyle=test;8 N" B9 `/ R6 [. ?* h
context.fillrect(0,0,400,400);4 v) g$ i- O% e7 P
image.onload=function() { //此方法的作用是,如果图片是比较大的网络图像文件,防止图像全部装载完毕才看见该图像,这样就可以一边装载一边绘制了。! Y# X0 [, p+ v# X1 ?9 r! \ x- I
drawimg(context,image);
4 R) c; t: j2 W9 G, [# U}/ I; ]0 O5 @8 { v7 f
function drawimg(context,image){
( n( s( ^, d8 f: x6 M: Y//绘制原始图像; S# C, O% ?' }1 e3 Z4 C
context.drawimage(image,10,10,125,125);( r% {7 n% v0 A1 Z: _7 p
//局部放大
: B5 s' G7 B" K1 econtext.drawimage(image,20,0,90,100,150,10,125,125);
- j P3 y' e. a% a: b. \+ Qcontext.rect(20,20,80,80);
1 B! j _$ J! o+ dcontext.clip();* g2 W, l, |/ u6 H
context.drawimage(image,0,0,200,200);0 f' J8 x2 l8 Q- S1 v* W
}. K$ x7 Z! k( I5 s$ k- k, l; v$ f
23、保存、恢复5 C9 d# T9 D0 ^' z: a) S7 M0 t: k
contex.save();将当前状态保存到栈中。注意:保存的只是对绘制图形的设置和变换,不会保存绘制图形的内容。
) w a2 b! k. z* s* r8 S' `1 d7 ^8 }context.restore();从栈中取出之前保存的图形状态
6 o! H" c; B* {0 H9 C3 P可以应用的场合:
! t2 s& [ V4 C$ g- K- F(1)图像或图形变形
4 ~7 N2 n6 j' u; c/ G1 n, K(2)图像裁剪9 x3 h. I0 y1 @: ~
(3)改变图形上下文时属性时:fillstyle,font,globalalpha,globalcomposite-operation,linecap,linejoin,linewidth,miterlimit,shadowblur,shadowcolor,, u/ R. L0 ]5 C6 M4 g
shadowoffsetx,shadowoffsety,strokestyle,textalign,textbaseline) Z3 ?: \: g7 S* B# b+ f; f
24、线性渐变
]* }6 w) I2 M O- E& r- ^# h代码如下:
* X! j7 P: ^6 W' |; Jvar g=context.createlineargradient(xstart,ystart,xend,yend);3 @0 B) K5 g3 ~; C0 Q
var g1=context.createradialgradient(xstart,ystrat,radiusstrat,xend,yend,radiusend);
b' {1 J+ H5 ^4 {' Q& qg.addcolorstop(0,'red');
+ e$ F3 q( o" d( Z; ^7 jg.addcolorstop(0,'green');: @9 ]5 x& g% b8 K
context.fillstyle=g;, ?+ ]( T2 y4 z/ a) G
context.fillrect(0,0,200,200);
i, k" m* V( E" j
' z9 a6 V; j/ @: x/ p" e更多网页制作信息请查看: 网页制作 |
|