HTML5context标签,HTML5-Canvas标签详解

是html5当中的一个标签,通过Javascript来画图。

var canvas = document.getElementById(”canvas”);

var ctx = canvas.getContext(”2d”);

ctx.fillStyle = “rgb(0,0,200)”;

ctx.fillRect(10, 10, 50, 50);

画图形

805037be7c4744266a2cffd38e062095.png

这是canvas的网格,刚才的图形,x=10,y=10, width=150, height=150

不像svg, canvas仅支持一种图形-矩形,所有其它复杂的图形都是通过一些函数来组成的。

画矩形

fillRect(x,y,width,height) : 画一个填充的矩形

strokeRect(x,y,width,height): 为一个矩形描边

clearRect(x,y,width,height): 清楚一个矩形的一部分并且设为透明

rect(x, y, width, height)

直接画矩形,当调用rect方法时moveTo会直接定位到(0,0)位置

画路径

beginPath() 创建路径的第一步是调用beginPath方法,返回一个存储路径的信息

closePath() 从当前的点到起始点闭合路径

stroke()描边路径

fill()填充路径

lineTo(x, y) 从上一个起点到(x,y)的点画线,上一个起点可以通过moveTo来指定,默认为原先路径的终点

ctx.beginPath();

ctx.moveTo(75,50);

ctx.lineTo(100,75);

ctx.lineTo(100,25);

ctx.fill();

画弧线

arc(x, y, radius, startAngle, endAngle, anticlockwise)

(x,y)是圆弧的圆心,radius-半径, startAngle和endAngle是圆弧的开始和结束弧度(radians = (Math.PI/180)*degree),anticlockwise为true的话是逆时针,否则为顺时针

二次方曲线以及贝塞尔曲线

cf92ba2070983b5593c96613f6b0aea3.png

quadraticCurveTo(cp1x, cp1y, x, y)

bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)

(cp1x, cp1y),(cp2x,cp2y)是曲线的控制点(红点),(x,y)是曲线的终点

使用图像

drawImage(image, x, y)image-图像对象

function draw() {

var ctx = document.getElementById(’canvas’).getContext(’2d’);

var img = new Image();

img.onload = function(){

ctx.drawImage(img,0,0);

ctx.beginPath();

ctx.moveTo(30,96);

ctx.lineTo(70,66);

ctx.lineTo(103,76);

ctx.lineTo(170,15);

ctx.stroke();

}

img.src = ‘images/backdrop.png’;

}

drawImage(image, x, y, width, height)width和height是目标canvas上图像的宽高drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)

1425d38f2517d5ceb6d4c0cf0b2e56dd.pngimage参数与前面一样,后面的四个参数是截取的参数,再后面的四个参数是目标canvas图像的位置以及宽高

应用样式和颜色

fillStyle= color设置填充色

strokeStyle= color 设置描边色

color可以是css颜色值,一个渐变对象或一个模式对象

线条样式

lineWidth= value 线条宽度

c6dd993dc7514a8236ec67002edfaedc.pnglineCap= type 线条的端点类型可以是butt(默认),round和square

88a26ec5b392ee1b44dd4b9ec8304522.pnglineJoin= type 连接线的类型:round,bevel和miter(默认)

5343b066ca4ad16c692a1911b7caa738.pngmiterLimit= value 当设置miter时的选项

7df73555a55d0ea77c46d3158c720e48.png

渐变

通过下面两个方法创建一个canvasGradient对象, 就可以把这个对象应用于fillStyle和strokeStyle属性了

createLinearGradient(x1,y1,x2,y2) (x1,y1)到(x2,y2)的渐变createRadialGradient(x1,y1,r1,x2,y2,r2) (x1,y1,r1)的圆到(x2,y2,r2)的圆

addColorStop(position, color) 为canvasGradient对象添加颜色,position-[0,1]区间的值,代表添加颜色的位置,color-添加的颜色(如#fff, rgba(0,0,0,1)等)

模式

createPattern(image,type)image-Image对象,type:repeat,repeat-x, repeat-y, no-repeat 可以讲其应用与fillStyle或strokeStyle属性

阴影

shadowOffsetX= float 阴影x偏移shadowOffsetY=float阴影y偏移

shadowBlur=float 模糊度shadowColor=color 阴影颜色

ctx.shadowOffsetX = 2;

ctx.shadowOffsetY = 2;

ctx.shadowBlur = 2;

ctx.shadowColor = "rgba(0, 0, 0, 0.5)";

ctx.font = "20px Times New Roman";

ctx.fillStyle = "Black";

ctx.fillText("Sample String", 5, 30);

变换

保存和恢复

save()Cavas状态被存储在栈中,当调用save,当前的画图状态将被保存的栈中

restore()调用restore最后一次存储的状态会被恢复

转移

translate(x, y)移动canvas坐标

d14658bf938c95f6dc4f8c6812f1f474.png

旋转

rotate(angle)angle是旋转的角度,旋转的中心是canvas坐标原点,可以通过translate来移动canvas的坐标

ce1534782b3075c4e65933e22882e8b0.png

缩放

scale(x, y)x是水平方向的缩放因子,y是垂直方向的缩放因子,必须都为正数

变换

transform(m11, m12, m21, m22, dx, dy)

setTransform(m11, m12, m21, m22, dx, dy)

组合

globalCompositeOperation= type 设置不同形状的组合类型

type:(方的图形是已经存在的canvas内容,圆的图形是新的形状)

source-over(默认) – 在canvas内容上面画新的形状

afd7ae55e0e633819533836a619bfee9.png

destination-over

0665e073bc527335fa5ae477ad01efb5.png

source-in

632eb9ed872f806b360d0b02a9bc5637.png

destination-in

c5793ee339a1833d4a903bc899a953f7.png

source-out

fddc6c2f860647882fcc8bc478479152.png

destination-out

0327295c52e2e509959a5365e0eb60e2.png

source-atop

15d3fd9e9942a62d09c82a977dd4eb83.png

destination-atop

d354b69d5b6f5018dea32c50be9ede6e.png

lighter

bb2b9facbb42d32b1a40c0d9d8ed0fc4.png

darker

e86d8eb81531223b5113989682163605.png

xor

a9bb29b3ffb07ce65b55a69ac307e6a0.png

copy

6c13e323af7d5f7cfddf883d892150b9.png

剪切路径

clip()

c0ef574e38df10191b6ec6ce93733a9d.png

基本动画

基本的动画步骤:

1.清除canvas – clearRect

2.保存canvas状态 – save

3.画要做动画的形状

4.恢复canvas状态 – 如果你已经保存了状态,在画新的帧之前回复它

控制动画

setInterval(animateShape,500);

setTimeout(animateShape,500);

var img = new Image();

//User Variables

img.src = 'Capitan_Meadows,_Yosemite_National_Park.jpg';

var CanvasXSize = 800;

var CanvasYSize = 200;

var speed = 30; //lower is faster

var scale = 1.05;

var y = -4.5; //vertical offset

//End User Variables

var dx = 0.75;

var imgW = img.width*scale;

var imgH = img.height*scale;

var x = 0;

if (imgW > CanvasXSize) { x = CanvasXSize-imgW; } // image larger than canvas

var clearX

var clearY

if (imgW > CanvasXSize) { clearX = imgW; } // image larger than canvas

else { clearX = CanvasXSize; }

if (imgH > CanvasYSize) { clearY = imgH; } // image larger than canvas

else { clearY = CanvasYSize; }

var ctx;

function init() {

//Get Canvas Element

ctx = document.getElementById('canvas').getContext('2d');

//Set Refresh Rate

return setInterval(draw, speed);

}

function draw() {

//Clear Canvas

ctx.clearRect(0,0,clearX,clearY);

//If image is <= Canvas Size

if (imgW <= CanvasXSize) {

//reset, start from beginning

if (x > (CanvasXSize)) { x = 0; }

//draw aditional image

if (x > (CanvasXSize-imgW)) { ctx.drawImage(img,x-CanvasXSize+1,y,imgW,imgH); }

}

//If image is > Canvas Size

else {

//reset, start from beginning

if (x > (CanvasXSize)) { x = CanvasXSize-imgW; }

//draw aditional image

if (x > (CanvasXSize-imgW)) { ctx.drawImage(img,x-imgW+1,y,imgW,imgH); }

}

//draw image

ctx.drawImage(img,x,y,imgW,imgH);

//amount to move

x += dx;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值