位置: IT常识 - 正文

H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制(h5 画图)

编辑:rootadmin
H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制

目录

1. canvas 简介

2. canvas 标签介绍

3. canvas 上下文 Context

4. 案例:在 canvas 画布中绘制表格

5. canvas 的 beginPath 状态

6. 绘制矩形 rect

7. 绘制圆形 arc

8. 案例:根据一组数据绘制饼状图


1. canvas 简介

推荐整理分享H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制(h5 画图),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:h5画册,h5画面设计,h5 画图,h5canvas动画入门教程,h5中canvas,h5画布大小,h5画布大小,h5中canvas,内容如对您有帮助,希望把文章链接给更多的朋友!

        canvas 是HTML5 提供的一种新标签 <canvas></canvas>,与 div 类似,是一个矩形的画布,它可以支持 JavaScript 在上面绘画,控制每一个像素;canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法,可以使得页面更加丰富多彩。当前 canvas 广泛应用于游戏、可视化数据(echarts)、广告等领域。

2. canvas 标签介绍

        canvas 其实就是一个普通的 HTML 标签,需要进行闭合,可以设置宽高、背景色属性,但宽高单位必须是 px,否则就会被忽略;一个 canvas 默认为 300*150 像素。

        需要注意 canvas 元素的宽高必须使用它自带的属性进行设置,而不要用 CSS 选择器控制 canvas 的宽高,否则会造成图像拉伸,除宽高之外的其余属性则可用 CSS。如下简单案例:

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>canvas标签</title> <style> #can1 { background-color: cadetblue; border: 2px solid red; } </style></head><body> <!-- 设置宽高使用canvas标签的属性 --> <canvas id="can1" width="300px" height="150px"></canvas></body></html>

效果如下:

3. canvas 上下文 Context

        Context 是 canvas 的上下文,也就是绘制环境,它是所有绘制操作 api 的入口或者集合;canvas 本身是无法绘制任何内容的,需要使用 JavaScript 进行操作。而 Context 正是 JavaScript 操作 canvas 的接口。

获取上下文分为两步:首先获取 canvas 标签,然后再获取该标签的上下文;

<script> // 1.DOM操作获取canvas标签 var canvas = document.getElementById('can1'); // 2.获取canvas的上下文(2d渲染) var ctx = canvas.getContext('2d');</script>

获取 canvas 上下文之后,就可以在画布上进行图形绘制了;上下文 Context 相关属性如下:

(ctx 是博主定义的获取到的上下文 Context 的变量名,可以随意更换,以下介绍都用ctx)

ctx.moveTo(x,y);将画笔移动到坐标(x,y)位置

ctx.lineTo(x,y);从当前位置绘制直线到坐标(x,y)位置

ctx.closePath();关闭路径,闭合线条

ctx.lineWidth;线宽

ctx.strokeStyle;描边颜色,必须用于描边之前

ctx.stroke();渲染直线,相当于描边

ctx.fillStyle;填充颜色,必须用于填充之前

ctx.fill();填充,默认为黑色

接下来我们结合这些属性绘制一个简单的正方形:

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>canvas标签</title> <style> #can1 { background-color: rgb(204, 216, 216); border: 2px solid red; } </style></head><body> <!-- 设置宽高使用canvas标签的属性 --> <canvas id="can1" width="600px" height="500px"></canvas></body><script> // DOM操作获取canvas标签 var canvas = document.getElementById('can1'); // 获取canvas的上下文(2d渲染) var ctx = canvas.getContext('2d'); // 绘制长方形 ctx.moveTo(100, 100); //将画笔移动到坐标 100 100 ctx.lineTo(200, 100); //从画笔位置绘制直线到坐标 200 100 ctx.lineTo(200, 200); //从当前位置绘制直线到 200 200 ctx.lineTo(100, 200); //.从当前位置... ctx.closePath(); //闭合线条 ctx.lineWidth = 6; //线宽 ctx.strokeStyle = 'red'; //描边颜色 ctx.stroke(); //渲染直线(描边) ctx.fillStyle = 'blue'; //填充颜色 ctx.fill(); //填充</script></html>H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制(h5 画图)

效果如下:

4. 案例:在 canvas 画布中绘制表格<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>案例:绘制表格</title> <style></style></head><body> <div> <canvas id="table"></canvas> </div></body><script> (function () { var canvas = document.getElementById('table'); //获取canvas标签 var ctx = canvas.getContext('2d'); //获取上下文 //设置画布宽高、边框(边框也可使用CSS选择器来设定) canvas.width = 600; canvas.height = 400; canvas.style.border = '2px solid #000'; //设置上下文样式 ctx.lineWidth = .5; ctx.strokeStyle = '#999'; //绘制表格 var rect_hei = 20; //定义每一行高20px var rect_wit = 40; //定义每一列宽40px for (var i = 0; i < canvas.width / rect_hei; i++) { //循环绘制 //绘制横线 ctx.moveTo(0, i * rect_hei); //从x轴为0的位置开始,每隔一个行高便绘制横线 ctx.lineTo(canvas.width, i * rect_hei); ctx.stroke(); //绘制竖线 ctx.moveTo(i * rect_wit, 0); //从y轴为0的位置开始,每隔一个列宽便绘制竖线 ctx.lineTo(i * rect_wit, canvas.height); ctx.stroke(); } }())</script></html>

效果如下:

5. canvas 的 beginPath 状态

        需要知道,在 canvas 画布中绘制图形是基于状态的,意思就是说如果前面已经设置了描边颜色属性 strokeStyle 为某个颜色,那么在这之后的绘制当中,所有线条都会是这个颜色;如果再次设置描边颜色,则所有线条都会成为最新设置的颜色,前面设置的都被覆盖,无法做到颜色不一。如下:

而这个时候,为了能够绘制出不同颜色的线条,就需要使用到 beginPath 开启新状态;

ctx.beginPath();开启新状态的绘图,前面的设置不会被覆盖;新状态可以继承之前状态的样式,但是在新状态中设置的样式就只能作用在新状态当中。

如下案例:

6. 绘制矩形 rect

        如果只是按照步骤:起点 --> 画线 --> 描边 一步一步的绘制一个矩形的话,就太麻烦了,canvas 也提供了一种快速绘制矩形的方法 rect,并且提供了各种属性。语法如下:

ctx.rect(x, y, width, height);x, y为矩形左上角坐标, width 和 height 以像素 px 为单位,该语法只规定了矩形的路径,没有填充和描边。ctx.strokeRect(x, y, width, height);描边矩形,结合绘制与描边。ctx.fillRect(x, y, width, height);填充矩形,结合绘制与填充ctx.clearRect(x, y, width, height);清除矩形,相当于橡皮擦,在该矩形范围内的图像都会被擦除。

我们使用 rect 语法绘制一个矩形,只需一句代码即可:

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>绘制矩形</title> <style></style></head><body> <div> <canvas id="table"></canvas> </div></body><script> var canvas = document.getElementById('table'); //获取canvas标签 var ctx = canvas.getContext('2d'); //获取上下文 //设置画布宽高、边框(边框也可使用CSS选择器来设定) canvas.width = 600; canvas.height = 400; canvas.style.border = '2px solid #000'; //快速绘制矩形 ctx.rect(100, 100, 50, 50); ctx.stroke(); //描边矩形 ctx.strokeRect(200, 100, 50, 50); //填充矩形 ctx.fillRect(300, 100, 50, 50);</script></html>

效果如下:

7. 绘制圆形 arcctx.arc(x,y,r,sAngle,eAngle,counterclockwise);x、y 为圆心点坐标;r 半径;sAngle 开始角度,圆心到最右边点为 0 度,顺时针方向依次增大;eAngle 结束角度,注意用的是弧度 Π(180°);counterclockwise:是否是逆时针,true 是逆时针,false 顺时针。

接下来,我们使用 arc 绘制一个圆弧,效果如下:

(提示:弧度与角度的转换公式,角度 = 度数 * Math.PI / 180)

8. 案例:根据一组数据绘制饼状图<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>绘制饼状图</title> <style></style></head><body> <div> <canvas id="table"></canvas> </div></body><script> var canvas = document.getElementById('table'); //获取canvas标签 var ctx = canvas.getContext('2d'); //获取上下文 //设置画布宽高、边框(边框也可使用CSS选择器来设定) canvas.width = 600; canvas.height = 400; canvas.style.border = '2px solid #000'; //定义饼状图数据 var data = [{ 'value': 0.2, 'color': '#149985', 'title': '城市A' }, { 'value': 0.3, 'color': 'red', 'title': '城市B' }, { 'value': 0.4, 'color': 'blue', 'title': '城市C' }, { 'value': 0.1, 'color': '#999999', 'title': '城市D' }, ] //绘制饼状图 var tempAngle = -90; //从-90°开始绘制 for (var i = 0; i < data.length; i++) { ctx.beginPath(); //每一次循环都绘制不同的扇区,所以都要开启新状态 ctx.moveTo(200, 200); //每一次都回到圆心点开始绘制 var angle = data[i].value * 360; //每一个扇区的角度 ctx.fillStyle = data[i].color; //颜色填充按照数据遍历 var startAngle = tempAngle * Math.PI / 180; //起始角度 var endAngle = (tempAngle + angle) * Math.PI / 180; //每一次的结束角度=起始角度+扇区角度 ctx.arc(200, 200, 100, startAngle, endAngle); tempAngle = tempAngle + angle; //每次绘制完一次扇区起始角度为原角度加该扇区角度 ctx.fill(); }</script></html>

案例效果如下:

饼状图文字的绘制等参见下期:H5画布 canvas 入门到精通 _ 第二部分

小结:canvas 绘制基本步骤

获得上下文:canvas.getContext('2d')开始新状态绘制:ctx.beginPath()画笔起始点:ctx.moveTo(x, y)绘制线:ctx.lineTo(x, y)闭合路径:ctx.closePath()描边:ctx.stroke()

三篇文章速通 canvas:

➡️ 第一部分:canvas介绍,绘制圆形、矩形; ➡️ 第二部分:绘制文字、图片、坐标系,canva颜色和样式,绘制环境; ➡️ 第三部分:canvas库Konva.js的使用。

本文链接地址:https://www.jiuchutong.com/zhishi/297816.html 转载请保留说明!

上一篇:java前后端加密解密crypto-js(java前后端加密解密请求)

下一篇:深聊测试开发之:从订单支付流程来聊一聊,如何预防重复支付,建议收藏。(深度测试软件)

  • plk-al10是什么型号的手机(plkal10是什么型号)

    plk-al10是什么型号的手机(plkal10是什么型号)

  • 问道金系怎么加点(问道金系怎么加点好平民玩家)

    问道金系怎么加点(问道金系怎么加点好平民玩家)

  • 红米k30pro是双扬声器还是单扬声器(红米k30pro双扬声器怎么开)

    红米k30pro是双扬声器还是单扬声器(红米k30pro双扬声器怎么开)

  • 小米手机的语音助手叫什么呢(小米手机的语音播报功能在哪里设置)

    小米手机的语音助手叫什么呢(小米手机的语音播报功能在哪里设置)

  • 快手小店关闭了多久可以再开通(快手小店关闭了怎么开通店铺)

    快手小店关闭了多久可以再开通(快手小店关闭了怎么开通店铺)

  • 华为mate30有5g网络吗(华为mate30有5G网吗)

    华为mate30有5g网络吗(华为mate30有5G网吗)

  • qq音乐蹦迪模式怎么关闭(QQ音乐蹦迪模式)

    qq音乐蹦迪模式怎么关闭(QQ音乐蹦迪模式)

  • 联想m7615dna怎么双面复印(联想m7615dna怎么清零)

    联想m7615dna怎么双面复印(联想m7615dna怎么清零)

  • 华为手机云备份空间不足有影响吗(华为手机云备份满了怎么清理)

    华为手机云备份空间不足有影响吗(华为手机云备份满了怎么清理)

  • 什么是文件夹(简述什么是文件夹)

    什么是文件夹(简述什么是文件夹)

  • 电脑上的windows键是哪个键(电脑上的windows怎么打开)

    电脑上的windows键是哪个键(电脑上的windows怎么打开)

  • 华为后台锁定(华为手机如何锁住应用不关掉)

    华为后台锁定(华为手机如何锁住应用不关掉)

  • 群语音通话没有被邀请会显示吗(群里语音电话没有声音怎么回事)

    群语音通话没有被邀请会显示吗(群里语音电话没有声音怎么回事)

  • 快手直播间被警告B类违规有什么影响吗(快手直播间警告提示)

    快手直播间被警告B类违规有什么影响吗(快手直播间警告提示)

  • 手机电池膨胀怎么处理(手机电池膨胀怎么办办)

    手机电池膨胀怎么处理(手机电池膨胀怎么办办)

  • 拼多多抢先拼单什么意思(拼多多什么叫抢先拼单)

    拼多多抢先拼单什么意思(拼多多什么叫抢先拼单)

  • iphone11和xr屏幕区别(iphone11屏幕与xr)

    iphone11和xr屏幕区别(iphone11屏幕与xr)

  • 路由器网速不稳定是什么原因(路由器网速不稳定还慢)

    路由器网速不稳定是什么原因(路由器网速不稳定还慢)

  • 含光800能用于手机吗(含光800芯片用在什么地方)

    含光800能用于手机吗(含光800芯片用在什么地方)

  • 微课传奇能退款吗(微课传奇不让看了吗)

    微课传奇能退款吗(微课传奇不让看了吗)

  • 拼多多怎么去掉推荐(拼多多怎么去掉隐私号码保护)

    拼多多怎么去掉推荐(拼多多怎么去掉隐私号码保护)

  • 桌面文件发送qq邮箱(桌面文件发送到qq)

    桌面文件发送qq邮箱(桌面文件发送到qq)

  • 索尼xperia1怎么设置开机动画

    索尼xperia1怎么设置开机动画

  • wps怎么将ppt铺满全屏(wpsppt铺满全屏)

    wps怎么将ppt铺满全屏(wpsppt铺满全屏)

  • 【AI绘图】来体验了下AI绘图(ai绘图素材)

    【AI绘图】来体验了下AI绘图(ai绘图素材)

  • 非金银首饰以旧换新增值税
  • 小规模免缴增值税吗
  • 税金及附加是负债类吗
  • 年报里资产总额能随便填吗
  • 一般纳税人建筑材料税率是多少
  • 吊车租赁有限公司
  • 销项税额是开票金额么
  • 跨期两年的发票怎么处理
  • 车票抵扣怎么做账
  • 企业前期开办费没有发票怎么入账
  • 属于期间费用抵减项目
  • 怎么控制成本费用餐厅
  • 跨月的普通发票怎么开
  • 医药酒精现在要兑水喝吗
  • 公司购买固定资产需要交印花税吗
  • 固定资产的清查由哪个部门负责
  • 发票上有个含税金额什么意思?
  • 国税是负税需要缴税吗
  • 行业协会收取的服务费
  • 增值税专用发票有效期是多长时间
  • 继承的房产出售要交20%是全额还是差额
  • 物业管理企业简介范文
  • 个人承包公司的经营所得怎么算
  • 滴滴打车怎么整
  • 工地伙食标准 费用
  • 二手车销售统一专票哪里开
  • 计算所得税时扣除增值税附加怎么算
  • 抵押贷款逾期怎么处理抵押物
  • 所得税前允许列支的税金包括
  • 筹建期间的广宣费
  • 华为手机屏幕变成黑白怎么调回来
  • windows11怎么打开设置
  • windows右键刷新总是卡住
  • 总分公司分税
  • 进项税额转出能进成本吗
  • 所得税年报期间费用明细表
  • 不附追索权的票据包括
  • 如何关闭win11系统
  • php mysql pdo
  • linux检测
  • 离退休干部书报费有关文件
  • 别人从我公司走账怎么做账务处理
  • 转让旧房及建筑物的扣除项目
  • 进项税额转出可以填负数吗
  • 银行承兑汇票应由在承兑银行开立存款账户的存款人签发
  • ci框架过时了吗
  • mongodb使用场景 简书
  • 织梦官网倒闭了吗
  • 咨询公司小规模纳税人企业所得税核定征收
  • 税控盘服务费小规模可以抵扣吗
  • 固定资产盘亏所得税清算时怎么处理
  • 公司对员工的罚款用途
  • 项目支付预缴税额怎么算
  • 员工个人负担的社保要交工会经费怎
  • 劳保统筹费缴费比例
  • 暂估未取得发票汇缴纳税调增怎么填
  • 公司筹建期间允许投标吗
  • 我没付款,但是显示成功?
  • window7临时文件
  • win7系统连接VPN失败时提示错误代码721的故障分析及解决方法
  • win8无法安装其它软件
  • linux常用命令详解
  • xp系统安装版
  • win10扫雷在哪打开
  • linux who am i
  • linux共享内存同步机制
  • 高级控件动态数据加载过程有哪些
  • perl cgi
  • python爬虫正则
  • 使用NGUI时遇到物理引擎错误
  • js判断用户输入密码
  • jQuery 更改checkbox的状态,无效的解决方法
  • android 5.1 WIFI图标上的感叹号及其解决办法
  • 湖南税务发票查验平台官网
  • 江苏省国家税务局官网
  • 网上申报成功怎么查询
  • 走逃失踪纳税人如何处理
  • 走访情况登记表 不想写怎么办
  • 税控盘过了时间没清卡要罚多少钱
  • 青海省地方税务局领导名单
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设