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 相关文章推荐
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 Javascript
JavaScript中的一些定位属性[图解]
Jul 14 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
Sep 19 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
Aug 18 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
Apr 06 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
Jun 17 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
Jul 25 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
Nov 21 Javascript
浅谈angularjs $http提交数据探索
Jan 20 Javascript
vue中改变滚动条样式的方法
Mar 03 Javascript
uin-app+mockjs实现本地数据模拟
Aug 26 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 Vue.js
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
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python flask 多对多表查询功能
2017/06/25 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
Python适配器模式代码实现解析
2019/08/02 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
个人自我剖析材料
2014/09/30 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
安全守法证明
2015/06/23 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
create-react-app开发常用配置教程
2022/06/25 Javascript