微信小程序 绘图之饼图实现


Posted in Javascript onOctober 24, 2016

微信小程序的推出,无疑将会在移动互联网行业里再次掀起风浪。有人会质疑小程序会不会火, 会不会火我不知道, 看微信的用户量即可明白一切。这里就先学习下微信小程序绘图的功能实现。

微信小程序 绘图之饼图实现

官方文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-canvas.html

思路是先画第一段弧,然后连线回圆心,关闭路径,注意不需要连线到起始位,用fill()自动闭合到起始点,对照Photoshop里路径转选区的做法可以有助于理解;第二段弧以前一段弧为起始角度,再回圆心,最后关闭路径;第三段弧以前两段弧之和为起始角度,扫过相应比重的弧度;以此类推,完成整圆。

微信小程序 绘图之饼图实现

布局文件

<canvas canvas-id="canvas2" style="width:200px;height:200px;border:1px solid #ccc;margin-top:100px;"></canvas>

Javascript文件

Page({
 onReady:function(){
  // 页面渲染完成
  // 创建上下文
  var context = wx.createContext();
// 画饼图
//  数据源
  var array = [20, 30, 40, 40];
  var colors = ["#ff0000", "#ffff00", "#0000ff", "#00ff00"];
  var total = 0;
//  计算问题
  for (index = 0; index < array.length; index++) {
    total += array[index];
  }
//  定义圆心坐标
  var point = {x: 100, y: 100};
//  定义半径大小
  var radius = 60;

/*  循环遍历所有的pie */
  for (i = 0; i < array.length; i++) {
    context.beginPath();
//    起点弧度
    var start = 0;
    if (i > 0) {
//      计算开始弧度是前几项的总和,即从之前的基础的上继续作画
      for (j = 0; j < i; j++) {
        start += array[j] / total * 2 * Math.PI; 
      }
    }
    console.log("i:" + i);
    console.log("start:" + start);
//   1.先做第一个pie
//    2.画一条弧,并填充成三角饼pie,前2个参数确定圆心,第3参数为半径,第4参数起始旋转弧度数,第5参数本次扫过的弧度数,第6个参数为时针方向-false为顺时针
   context.arc(point.x, point.y, radius, start, array[i] / total * 2 * Math.PI, false);
//   3.连线回圆心
   context.lineTo(point.x, point.y);
//   4.填充样式
   context.setFillStyle(colors[i]);
//   5.填充动作
   context.fill();
   context.closePath();
  }

  wx.drawCanvas({
    canvasId: 'canvas2',
    actions: context.getActions()
  });
 }
})

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
用Javascript评估用户输入密码的强度实现代码
Nov 30 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
Dec 10 Javascript
JavaScript对象创建及继承原理实例解剖
Feb 28 Javascript
juery框架写的弹窗效果适合新手
Nov 27 Javascript
jQuery中ajax的post()方法用法实例
Dec 26 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
Aug 17 Javascript
JS扩展String.prototype.format字符串拼接的功能
Mar 09 Javascript
基于vue展开收起动画的示例代码
Jul 05 Javascript
JS实现百度网盘任意文件强制下载功能
Aug 31 Javascript
vue form check 表单验证的实现代码
Dec 09 Javascript
vue项目中引入Sass实例方法
Aug 27 Javascript
js实现上传按钮并显示缩略图小轮子
May 04 Javascript
用jmSlip编写移动端顶部日历选择控件
Oct 24 #Javascript
微信小程序 富文本转文本实例详解
Oct 24 #Javascript
微信小程序 参数传递详解
Oct 24 #Javascript
10分钟掌握XML、JSON及其解析
Dec 06 #Javascript
JavaScript的new date等日期函数在safari中遇到的坑
Oct 24 #Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
Oct 24 #Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
Oct 24 #Javascript
You might like
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
jquery 弹出层实现代码
2009/10/30 Javascript
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
详解Nodejs mongoose
2018/06/10 NodeJs
Vue.use源码学习小结
2018/06/20 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
名片管理系统python版
2018/01/11 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
影视动画专业个人的自我评价
2013/12/31 职场文书
社区志愿者活动总结
2014/06/26 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
罗马假日观后感
2015/06/08 职场文书
 Python 中 logging 模块使用详情
2022/03/03 Python