javascript使用canvas实现饼状图效果


Posted in Javascript onSeptember 08, 2020

使用canvas写一个饼状图,供大家参考,具体内容如下

javascript使用canvas实现饼状图效果

代码:

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
</head>

<body>
 <canvas id='canvas' width='800' height='400' style="border: 1px solid red;"></canvas>

 <script>
  let data = [
   { title: "服饰1", money: 400 },
   { title: "服饰2", money: 300 },
   { title: "服饰3", money: 400 },
   { title: "服饰4", money: 200 },
   { title: "服饰5", money: 500 },
   { title: "服饰6", money: 180 },
   { title: "服饰7", money: 500 }]

  /** @type {HTMLCanvasElement} */
  let canvas = document.querySelector("#canvas");
  let ctx = canvas.getContext("2d");
  let r = 100;

  let money = function (obj, sum) {
   for (let i = 0; i < obj.length; i++) {
    sum += data[i].money
    
   }
   return sum;
  }
  let totalmoney = money(data, 0);

  let nowsum = 0;
  let start = 0;
  let end = 0;
  let R = 100;
  let i=0;
  data.forEach(function (item) {
   ctx.beginPath()
   nowsum += item.money;
   end = (nowsum / totalmoney) 
   ctx.moveTo(150, 150);
   ctx.arc(150, 150, R, start*Math.PI*2, end*Math.PI*2)
   start = end;
   //产生随机颜色
   ctx.fillStyle = '#' + Math.floor(Math.random() * 0xffffff).toString(16);
   ctx.rect(350,5+(35*i),30,30);
   ctx.font="14px 黑体"
   ctx.fillText(item.title,400,25+(35*i))
   ctx.strokeStyle = "gray"
   ctx.fill();
   ctx.stroke();
   i++;
  })
 </script>
</body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用JS操作FRAME中的IFRAME及其内容的实现代码
Jul 26 Javascript
善用事件代理,警惕闭包的性能陷阱。
Jan 20 Javascript
js实现倒计时(距离结束还有)示例代码
Jul 24 Javascript
AngularJS向后端ASP.NET API控制器上传文件
Feb 03 Javascript
jQuery插件ajaxFileUpload使用详解
Jan 10 Javascript
微信小程序使用modal组件弹出对话框功能示例
Nov 29 Javascript
Vue2.0结合webuploader实现文件分片上传功能
Mar 09 Javascript
vue使用iframe嵌入网页的示例代码
Jun 09 Javascript
使用react实现手机号的数据同步显示功能的示例代码
Apr 03 Javascript
Express本地测试HTTPS的示例代码
Jun 06 Javascript
vue data恢复初始化数据的实现方法
Oct 31 Javascript
详解Nuxt.js 实战集锦
Nov 19 Javascript
vue配置多代理服务接口地址操作
Sep 08 #Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
Sep 08 #Javascript
JS删除对象中某一属性案例详解
Sep 08 #Javascript
vue全局使用axios的操作
Sep 08 #Javascript
Vue自定义多选组件使用详解
Sep 08 #Javascript
vue项目中微信登录的实现操作
Sep 08 #Javascript
关于element-ui表单中限制输入纯数字的解决方式
Sep 08 #Javascript
You might like
php 无限级 SelectTree 类
2009/05/19 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
深入理解JavaScript定时机制
2010/10/29 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
python新手经常遇到的17个错误分析
2014/07/30 Python
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
python求众数问题实例
2014/09/26 Python
Python类的继承和多态代码详解
2017/12/27 Python
python让列表倒序输出的实例
2018/06/25 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
我爱读书演讲稿
2014/05/07 职场文书
少年雷锋观后感
2015/06/10 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
高中班主任心得体会
2016/01/07 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
redis缓存存储Session原理机制
2021/11/20 Redis
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技