canvas 学习指南
创始人
2024-05-28 16:57:34
0

canvas 学习指南

创建一个 canvas

 
定义宽高

如果在 CSS 样式中定义,我们使用 canvas 对象获取的宽度和高度是默认值,而不是实际的宽度和高度。这样就无法获取 canvas 对象正确的宽度和高度。获取 canvas 对象实际的宽度和高度是 Canvas 开发中最常用的操作,因此对于 Canvas 的宽度和高度我们就一定要在 HTML 属性中定义,而不是在 CSS 属性中定义。

我们可以使用 cnv.width 和 cnv.height 分别获取 Canvas 的宽度和高度,可以使用 cnv.getContext(“2d”)来获取 canvas 2D 上下文环境对象,也可以使用 toDataURL()来获取 canvas 对象产生的位图的字符串。在这里,cnv 是指 canvas 对象。

直线图形

  • 多边形

    可以将 moveTo()和 lineTo()配合使用来画三角形和矩形。其实在 Canvas 中,多边形也是使用 moveTo()和 lineTo()这两个方法画出来的。如果我们想要在 Canvas 中画多边形,则需要事先在草稿纸或软件中计算出多边形中各个顶点的坐标,然后再使用 moveTo()和 lineTo()在 Canvas 中画出来。跟矩形不一样,Canvas 没有专门用来绘制三角形和多边形的方法。对于三角形以及多边形,我们也是使用 moveTo()和 lineTo()这两个方法来实现。

  • 一条直线
    cxt.moveTo(x1, y1); cxt.lineTo(x2, y2); cxt.stroke();
    (x1, y1)表示直线“起点”的坐标。moveTo 的含义是“将画笔移到该点(x1, y1)位置上,然后开始绘图”。(x2, y2)表示直线“终点”的坐标。lineTo 的含义是“将画笔从起点(x1, y1)开始画直线,一直画到终点坐标(x2, y2)”。
    上面两句代码仅仅是确定直线的“起点坐标”和“终点坐标”这两个状态,但是实际上画笔还没开始“动”。因此我们还需要调用上下文对象的 stroke()方法才有效。使用 Canvas 画直线,与我们平常用笔在纸张上画直线是一样的道理,都是先确定直线起点(x1, y1)与终点(x2, y2),然后再用笔连线(stroke())。

  • 矩形
    对于绘制矩形,Canvas 还为我们提供了独立的方法来实现。在 Canvas 中,矩形分为两种,即“描边”矩形和“填充”矩形。

    在 Canvas 中,我们可以将 strokeStyle 属性和 strokeRect()方法配合使用来画一个“描边矩形”。 cxt.strokeStyle = 属性值; cxt.strokeRect(x, y, width, height);
    (1)strokeStyle 属性 strokeStyle 属性取值有三种,即颜色值、渐变色、图案。对于 strokeStyle 取值为渐变色和图案的情况
    2)strokeRect()方法 strokeRect()方法用于确定矩形的坐标,其中 x 和 y 为矩形最左上角的坐标。注意,凡是对于 Canvas 中的坐标,大家一定要根据 W3C 坐标系来理解。此外 width 表示矩形的宽度,height 表示矩形的高度,默认情况下 width 和 height 都是以 px 为单位的。

    在 Canvas 中,我们可以将 fillStyle 属性和 fillRect()方法配合使用来画一个“填充矩形”。
    cxt.fillStyle=属性值; cxt.fillRect(x, y, width, height);
    x 和 y 为矩形最左上角的坐标,width 表示矩形的宽度,height 表示矩形的高度。strokeRect()、fillRect()和 rect()都可以画矩形。这三种方法参数是相同的,不同在于实现效果方面。其中 strokeRect()和 fillRect()这两个方法在调用之后,会立即把矩形绘制出来。而 rect()方法在调用之后,并不会把矩形绘制出来。只有在使用 rect()方法之后再调用 stroke()或者 fill()方法,才会把矩形绘制出来。
    x 和 y 为矩形最左上角的坐标,width 表示矩形的宽度,height 表示矩形的高度。strokeRect()、fillRect()和 rect()都可以画矩形。这三种方法参数是相同的,不同在于实现效果方面。其中 strokeRect()和 fillRect()这两个方法在调用之后,会立即把矩形绘制出来。而 rect()方法在调用之后,并不会把矩形绘制出来。只有在使用 rect()方法之后再调用 stroke()或者 fill()方法,才会把矩形绘制出来。

清空矩形

我们可以使用 clearRect()方法来清空“指定矩形区域”

曲线图形

圆形

我们可以使用 arc()方法来画一个圆
cxt.beginPath(); cxt.arc(x, y,半径,开始角度,结束角度,anticlockwise); cxt.closePath();

首先必须调用 beginPath()方法来声明“开始一个新路径”,然后才可以开始画圆。在使用 arc()方法画圆完成之后,我们还需要调用 closePath()方法来关闭当前路径。beginPath()和 closePath()一般都是配合使用的。其中,beginPath()表示“开始路径”,closePath()表示“关闭路径”
anticlockwise 是一个布尔值,当为 true 时,表示按逆时针方向绘制;当为 false 时,表示按顺时针方向绘制。anticlockwise 默认值为 false,也就是说默认情况下按顺时针方向绘制。

弧形

如果想要画弧线,常见的有两种方法:arc()、arcTo()。
//状态描述 cxt.beginPath(); cxt.arc(x, y,半径,开始角度,结束角度,anticlockwise); //描边 cxt.strokeStyle = “颜色值”; cxt.stroke();

“arc()画弧线”与“arc()画描边圆”最大的不同在于:arc()画弧线不使用 closePath()来关闭路径。这一点大家一定要区分开,因为弧线不是一个闭合图形。而 closePath()是用来绘制“封闭图形”的

可以使用 arcTo()方法来画一条弧线
cxt.arcTo(cx, cy, x2, y2, radius);
(cx , cy)表示控制点的坐标,(x2 , y2)表示结束点的坐标,radius 表示圆弧的半径。

如果我们想要画一条弧线,需要提供三个点的坐标:开始点、控制点和结束点。其中一般由 moveTo()或 lineTo()提供开始点,arcTo()提供控制点和结束点。arcTo()方法就是利用“开始点”“控制点”和“结束点”这三个点所形成的夹角,然后绘制一段与夹角的两边相切并且半径为 radius 的圆弧。其中,弧线的起点是“开始点所在边与圆的切点”,而弧线的终点是“结束点所在边与圆的切点”。

相关内容

热门资讯

Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...