快捷搜索:  汽车  科技

canvas 怎么调试?前端之canvas学习

canvas 怎么调试?前端之canvas学习Canvas提供了几种方式绘制矩形:所有其他图形都至少需要生成一种路径。<canvas width="100" height="100" id="canva"> <p>您的浏览器版本暂不支持Canvas 请进行升级</p> </canvas> var canvas = document.getElementById('canva'); if (canvas.getContext){ var ctx = canvas.getContext('2d'); // drawing code here } else { // canvas-unsupported code here } 三、Canvas的坐标系统Canvas的坐标系统以左上角为原点,水平向右为X轴,垂直向下为Y轴,以像素为单位,所以每个点都是非负整数。​Canvas只支持一种原


一、什么是Canvas

没有canvas的年代,绘图只能借助Flash,页面不得不用JavaScript和Flash进行交互,而现在可以直接用Html5的canvas元素使用JavaScript在网页上绘制图形。

Canvas指定了尺寸,可以在这个范围内任意绘制。

Canvas拥有多种绘制路径、矩形、圆形、字符以及添加图形的方法。

二、Canvas的环境

由于浏览器对HTML5标准支持不一致,所以通常在<canvas>的内部添加一些说明性HTML代码,如果不支持将显示其内部的HTML。

<canvas width="100" height="100" id="canva"> <p>您的浏览器版本暂不支持Canvas 请进行升级</p> </canvas>

canvas 怎么调试?前端之canvas学习(1)

var canvas = document.getElementById('canva'); if (canvas.getContext){ var ctx = canvas.getContext('2d'); // drawing code here } else { // canvas-unsupported code here }

canvas 怎么调试?前端之canvas学习(2)

三、Canvas的坐标系统

Canvas的坐标系统以左上角为原点,水平向右为X轴,垂直向下为Y轴,以像素为单位,所以每个点都是非负整数。

canvas 怎么调试?前端之canvas学习(3)

canvas 怎么调试?前端之canvas学习(4)

四、绘制矩形

Canvas只支持一种原生图形的绘制:矩形。

所有其他图形都至少需要生成一种路径。

Canvas提供了几种方式绘制矩形:

描述方法参数创建矩形rect(x y width height)x:矩形左上角X坐标

y:矩形左上角的Y坐标

width:矩形的宽度,以像素计

height:矩形的高度,以像素计

绘制一个填充颜色的矩形,默认黑色fillRect(x y width height)x:矩形左上角X坐标

y:矩形左上角的Y坐标

width:矩形的宽度,以像素计

height:矩形的高度,以像素计

绘制一个矩形边框,默认黑色strokeRect(x y width height)x:矩形左上角X坐标

y:矩形左上角的Y坐标

width:矩形的宽度,以像素计

height:矩形的高度,以像素计

在给定的矩形内清除指定的像素,然后这块区域变完全透明clearRect(x y width height)x:要清除的矩形左上角X坐标

y:要清除的矩形矩形左上角的Y坐标

width:要清除的矩形矩形的宽度,以像素计

height:要清除的矩形矩形的高度,以像素计

例如:

canvas 怎么调试?前端之canvas学习(5)

canvas 怎么调试?前端之canvas学习(6)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>1.绘制矩形</title> <style> #canvas{ width: 500px; height: 200px; border: 1px solid red; } </style> </head> <body> <canvas id="canvas"></canvas> <script> window.onload = function () { var canvas = document.getElementById('canvas'); if (!canvas.getContext) return; var context = canvas.getContext('2d'); context.strokeRect(20 20 100 100); context.fillRect(30 30 80 80); context.clearRect(40 40 60 60); } </script> </body> </html>

canvas 怎么调试?前端之canvas学习(7)

五、绘制路径

图形的基本元素是路径。

路径通过不同颜色和宽度的线段、曲线相连形成不同形状的点集合。

一个路径,甚至一个子路径,都是闭合的。

步骤:

1. 创建路径起始点 -- beginPath()

2. 使用画图命令画出路径 -- moveTo()等

3. 路径封闭 -- closePath()

4. 一旦路径生成即可通过描边或填充路径来渲染图形 -- fill()

描述方法参数填充当前绘图fill()

绘制已定义的路径stroke()

起始一条路径,或重置当前当前路径beginPath()

把路径以定到画布指定点moveTo(x y)x:路径的目标位置的X坐标

y:路径的目标位置的Y坐标

创建从当前点到起始点的路径closePath()

添加一个新点,然后再画布中创建从该点到最后指定点的线条lineTo(x y)x:路径的目标位置的X坐标

y:路径的目标位置的Y坐标

从原始画布剪切任意形状和尺寸的区域clip()

创建二次贝赛尔曲线quadraticCurveTo(cpx cpy x y)cpx:贝塞尔控制点的X坐标

cpy:贝塞尔控制点的Y坐标

x:结束点的X坐标

y:结束点的Y坐标

创建三次贝塞尔曲线bezierCurveTo(cp1x cp1y cp2x cp2y x y)cp1x:第一个贝塞尔控制点的 x 坐标

cp1y:第一个贝塞尔控制点的 y 坐标

cp2x:第二个贝塞尔控制点的 x 坐标

cp2y:第二个贝塞尔控制点的 y坐标

x:结束点的 x 坐标

y:结束点的 y 坐标

创建弧、曲线(用于创建圆形或部分圆)arc(x y r sAngle eAngle counterclockwise)x:圆的中心的 x 坐标

y:圆的中心的 y 坐标

r:圆的半径

sAngle:起始角,以弧度计。(弧的圆形的三点钟位置是 0 度)

eAngle:结束角,以弧度计

counterclockwise:可选,规定在逆时针还是在顺时针绘图,False = 顺时针,true = 逆时针

创建两切线之间的弧、曲线arcTo(x1 y1 x2 y2 r)x1:弧的起点的 x 坐标

y1:弧的起点的 y 坐标

x2:弧的终点的 x 坐标

y2:弧的终点的 y 坐标

r:弧的半径

如果指定的点位于当前路径中,则返回true 否则返回falseisPointInPath(x y)x:测试的 x 坐标

y:测试的 y 坐标

延伸:

一次贝塞尔曲线

canvas 怎么调试?前端之canvas学习(8)

canvas 怎么调试?前端之canvas学习(9)

二次贝塞尔曲线

canvas 怎么调试?前端之canvas学习(10)

canvas 怎么调试?前端之canvas学习(11)

转存失败

重新上传

取消

canvas 怎么调试?前端之canvas学习(12)

canvas 怎么调试?前端之canvas学习(13)

三次贝塞尔曲线

canvas 怎么调试?前端之canvas学习(14)

canvas 怎么调试?前端之canvas学习(15)

六、添加样式、颜色和阴影

描述方法参数用于填充绘画的颜色、渐变或模式fillStylecolor|gradient|pattern

color:css颜色值

gradient:用于填充绘图的渐变对象(线性或放射性)

pattern:用于填充绘图的 pattern 对象

用于笔触的颜色、渐变或模式strokeStylecolor|gradient|pattern

colorcss颜色值

gradient:用于填充绘图的渐变对象(线性或放射性)

pattern:用于填充绘图的 pattern 对象

用于阴影的颜色shadowColorcolor:css颜色值用于阴影的模糊级别shadowBlurnumber:模糊级别数阴影距形状的水平距离shadowOffsetXnumber:正值或负值,定义阴影与形状的水平距离阴影距形状的垂直距离shadowOffsetYnumber:正值或负值,定义阴影与形状的垂直距离

创建线性渐变createLinearGradient(x0 y0 x1 y1)x0:渐变开始点的 x 坐标 y0:渐变开始点的 y 坐标 x1:渐变结束点的 x 坐标 y1:渐变结束点的 y 坐标

canvas 怎么调试?前端之canvas学习(16)

在指定方向上重复指定的元素(元素可以是图片、视频,或者其他 <canvas> 元素)cratePattern(image "repeat|repeat-x|repeat-y|no-repeat")image:规定要使用的图片、画布或视频元素 "repeat:默认。该模式在水平和垂直方向重复 repeat-x:该模式只在水平方向重复 repeat-y:该模式只在垂直方向重复 no-repeat:该模式只显示一次(不重复) "

canvas 怎么调试?前端之canvas学习(17)

创建放射状、环形的渐变createRadialGradient(x0 y0 r0 x1 y1 r1)x0:渐变的开始圆的 x 坐标 y0:渐变的开始圆的 y 坐标 r0:开始圆的半径 x1:渐变的结束圆的 x 坐标 y1:渐变的结束圆的 y 坐标 r1:结束圆的半径

canvas 怎么调试?前端之canvas学习(18)

规定渐变对象中的颜色和停止位置addColorStop(stop color)stop:介于 0.0 与 1.0 之间的值,表示渐变中开始与结束之间的位置

color: css 颜色值

线条的结束端点样式lineCap"butt|round|square"

"

butt:默认。向线条的每个末端添加平直的边缘

round:向线条的每个末端添加圆形线帽

square:向线条的每个末端添加正方形线帽

"

两条线相交时,所创建的拐角类型lineJoin"bevel|round|miter"

"

bevel:创建斜角

round:创建圆角

miter:默认。创建尖角

"

当前的线条宽度lineWidthnumber:当前线条的宽度,以像素计

最大的斜接长度miterLimitnumber:正数。规定最大斜接长度。

如果斜接长度超过 miterLimit 的值,边角会以 lineJoin 的 "bevel" 类型来显示

七、绘制文字

描述方法参数当前字体属性font

当前对齐方式textAlign

当前文本基线textBaseline

在画布上绘制被填充的文本fillText()

在画布上绘制未被填充的文本strokeText()

返回包含指定文本宽度的对象measureText()

八、绘制图片

描述方法参数在画布上绘制图像、画布或视频drawImageimg:规定要使用的图形、画布或视频

sx:可选,开始剪切的X坐标位置

sy:可选,开始剪切的Y坐标位置

swidth:可选,被剪切图形的宽度

sheight:可选,被剪切图形的高度

x:在画布上放置图形的X坐标位置

y:在画布上放置图形的Y坐标位置

width:可选,要使用的图形的宽度(伸展或缩小图像)

height:可选,要使用的图形的高度(伸展或缩小图像)

返回ImageData对象的宽度width

返回ImageData对象的高度height

返回一个对象,其包含指定的ImageData对象的图像数据data

创建新的、空白的ImageData对象crateImageData()

返回ImageData对象,该对象为画布上指定的矩形复制像素数据getImageData()

把图像数据(从指定的ImageData对象)放回画布上putImageData()

九、变形

描述方法参数重新映射画布上的(0 0)位置translate()x:左右偏移量

y:上下偏移量

移动中心是坐标原点。

缩放当前绘图至更大或更小scale()scaleWIdth:缩放当前绘图宽度(1=100% 2=200%)

scaleHeight:缩放当前绘图高度(1=100% 2=200%)

旋转当前绘图rotate()angel:旋转角度,以弧度计,如需将角度转换为弧度,以degrees * Matn.PI/180公式计算。顺时针方向旋转,旋转中心是坐标原点。替换绘图的当前转换矩阵transform()a:水平缩放绘图

b:水平倾斜绘图

c:垂直倾斜绘图

d:垂直缩放绘图

e:水平移动绘图

f:垂直移动绘图

将当前转换重置为单位矩阵,然后运行transform()setTransform()a:水平旋转绘图

b:水平倾斜绘图

c:垂直倾斜绘图

d:垂直缩放绘图

e:水平移动绘图

f:垂直移动绘图

延伸:

1.translate:

canvas 怎么调试?前端之canvas学习(19)

canvas 怎么调试?前端之canvas学习(20)

2.rotate

canvas 怎么调试?前端之canvas学习(21)

canvas 怎么调试?前端之canvas学习(22)

转存失败

重新上传

取消

canvas 怎么调试?前端之canvas学习(23)

canvas 怎么调试?前端之canvas学习(24)

十、合成

描述方法参数设置或返回绘图当前alpha或透明值globalAlphanumber:透明值,必须介于0.0-1.0之间设置或返回心图形如何绘制到已有的图像上globalCompositeOperation等多个属性操作,略。。

十一、其他

描述方法参数保存当前环境的状态save()

返回之前报错过的路径状态和属性restore()

createEvent()

getContext()

toDataURL()

十二、动画

基本步骤:

1. 在绘制每一帧动画之前,需要清空所有canvas -- clearRect()

2. 保存canvas状态

3. 绘制动画图形

4. 恢复canvas状态

猜您喜欢: