html5的canvas元素使用,html5 canvas元素使用(一)(示例代码)

本文介绍 HTML5 的 Canvas 元素,演示如何利用 JavaScript 渲染上下文进行绘图,包括设置画布属性、绘制直线、矩形和圆形等基本图形的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

html5新增了一个canvas元素,用于在网页上生成一块矩形区域,用于绘制图像,功能非常强大,下面我来简单介绍一下

在页面中添加canvas

1 您的浏览器暂不支持canvas

e4dcdfe238bd4ed3a59167a7e857e7cc.jpg

如上图所示,如果不给canvas设置宽高,默认宽是300px,高是150px。同时,canvas默认是透明的

我们可以给它设置宽高,边框,甚至背景颜色。

注意,这边设置的宽高是画布的属性,和style的是不一样的

1 您的浏览器暂不支持canvas

canvas的使用

要想使用canvas,必须先渲染上下文,创建context对象,并获取2D运行环境

1 var context = document.getElementById("canvasDemo"); //var context = document.getElementsByTagName("canvas");这样是无效的

2 var ctx = context.getContext("2d");

然后就可以开始画图了

画图之前我们要先了解下是画图是根据什么定位的,答案是坐标,而且这个这边我们平时了解的是上下翻转的,不过到和网页css定位差不多

9cd638a4e75b4bfc856519eaa0a991a1.jpg

如果刚开始画图确定坐标不习惯的可以自己写个方法转换成正常的(x,canvasHeight-y)

canvas画线

这边画线也没什么好讲的,网上都有

1 var context = document.getElementById("canvasDemo");2 var ctx = context.getContext("2d");3

4 ctx.moveTo(0,0); //线条起点坐标5 ctx.lineTo(20,20); //线条终点坐标6 ctx.lineWidth = 4; //设置线条宽度7 ctx.strokeStyle = "white"; //设置线条绘制颜色8 ctx.stroke();

这边要注意的是设置线条属性值一定要在stroke之前,好比你自己拿笔画画,你肯定是先挑选画笔吧,总不能画完了(stroke)之后在挑笔吧...

这边线条还有一个属性比较有意思就是lineCap,设置了线条的格式,有三个值:butt,round,square;看下面就知道效果了

一个是正常的,一个是两端添加圆形线帽,一个是两端添加方形线帽

d15a54d2373a442e976c41c4215ea6b1.jpg

还可以连续画折现

2 ctx.moveTo(200,100);

3 ctx.lineTo(400,100);

4 ctx.lineTo(100,300);

5 ctx.lineWidth = 30;

6 ctx.lineCap = "butt";

7 ctx.strokeStyle = "white";

8 ctx.stroke();

7051453de49c4d55861c9ca1b97ecebb.jpg

这时候有个lineJoin属性,可以控制线段连接处的线条风格,值有bevel,round,miter

c1c3e838a7d14ac1a2a81713dfd6f506.jpg

40fae4eb27474b4da83357a380529aef.jpg

当值为miter时,会多一个属性miterLimit(定义最大斜接长度)多数为角度比较小的时候才会有这种情况

看miterLimit = 5时,斜接长度大于5,

只能按照bevel展示,这时候加大miterLimit的值就能恢复正常

f264e695a4064f9bab7c5e48b636462a.jpg

这个连接的属性还是有用的,有的时候画复杂的图形,连接的不好会很丑。

canvas画矩形

矩形的绘画还是比较简单的

有三种画法

1、一种是用线条构建,使用closePath()闭合折线图形

1 ctx.moveTo(200,100);2 ctx.lineTo(400,100);3 ctx.lineTo(400,200);4 ctx.lineTo(200,200);5 ctx.closePath();6 ctx.lineWidth = 10;7 ctx.lineCap = "butt";8 ctx.lineJoin = "miter";9 ctx.miterLimit =4;10 ctx.strokeStyle = "white";11 ctx.stroke();

f53edfe6625642c0b97ed2f9373ba372.jpg

先画边框再填充颜色

1 ctx.fillStyle = "lightBlue";2 ctx.fill();

53d860609a134c9f8067a04474a7b466.jpg

看到没,这边有意思的是线框被占了是不是。

2、第二种相当于分离进化版

1 ctx.strokeStyle = "white";2 ctx.lineWidth = 4;3 ctx.strokeRect(200,100,200,100) //strokeRect(x,y,width,height)4 ctx.fillStyle="lightBlue";

5 ctx.fill();

红色代码就没用了

a6603ce15c2f47e5ab8e9031d3c7de90.jpg

3、第三种直接填充画矩形,再画边框,当然你也可以不画

1 ctx.fillStyle="lightBlue";2 ctx.fillRect(200,100,200,100);3 ctx.strokeStyle="white";4 ctx.strokeRect(200,100,200,100); //strokeRect(x,y,width,height)

807dd55b88064c079ea96e691e1a2a05.jpg

9df1d7f383bf43be84c0bf482f14b476.jpg

canvas画圆

先来一个表达式吧

ctx.arc(x ,y,r,sAngle,eAngle,counterclockwise);     注意是arc不是src....

x,y  分别圆心的坐标;r为半径;sAngle为起始角;eAngle为结束角;counterclockwise规定逆时针还是顺时针,默认true为顺时针

3b5fbad897b24c80927ddf9479e25d6e.jpg

1 ctx.lineWidth = 5;2 ctx.strokeStyle = "white";3 ctx.arc(300,200,50,0,1.5*Math.PI);4 ctx.stroke();

0e48a5e983484335ab6461764b3e00ba.jpg

可以填充颜色

1 ctx.lineWidth = 5;2 ctx.strokeStyle = "white";3 ctx.arc(300,200,50,0,1.5*Math.PI);4 ctx.stroke();5 ctx.fillStyle = "lightBlue";6 ctx.fill();

29e1388abd4f4b4caab64fc46cdd4fd8.jpg

来个例子,画个中国太极

4e2001c55e254c178780bb919dce9ea5.jpg

1 ctx.beginPath();2 ctx.arc(300, 200, 150, 0.5 * Math.PI, 1.5 * Math.PI);3 ctx.fillStyle = "white";4 ctx.fill();5 ctx.beginPath();6 ctx.arc(300, 200, 150, 1.5 * Math.PI, 0.5 * Math.PI);7 ctx.fillStyle = "black";8 ctx.fill();9 ctx.beginPath();10 ctx.arc(300, 125, 75, 0.5 * Math.PI, 1.5 * Math.PI);11 ctx.fillStyle = "black";12 ctx.fill();13 ctx.beginPath();14 ctx.arc(300, 275, 75, 1.5 * Math.PI, 0.5 * Math.PI);15 ctx.fillStyle = "white";16 ctx.fill();17

18 ctx.beginPath();19 ctx.arc(300, 275, 20, 0, 2 * Math.PI);20 ctx.fillStyle = "black";21 ctx.fill();22 ctx.beginPath();23 ctx.arc(300, 125, 20, 0, 2 * Math.PI);24 ctx.fillStyle = "white";25 ctx.fill();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值