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


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 相关文章推荐
jquery tablesorter.js 支持中文表格排序改进
Dec 09 Javascript
JavaScript定时器详解及实例
Aug 01 Javascript
深入分析原生JavaScript事件
Dec 29 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
Mar 21 Javascript
JS中的二叉树遍历详解
Mar 18 Javascript
js删除局部变量的实现方法
Jun 25 Javascript
AngularJs  Creating Services详解及示例代码
Sep 02 Javascript
AngularJS动态绑定HTML的方法分析
Nov 07 Javascript
基于javascript的异步编程实例详解
Apr 10 Javascript
jQuery实现的简单无刷新评论功能示例
Nov 08 jQuery
详解webpack-dev-server的简单使用
Apr 02 Javascript
vue实现配置全局访问路径头(axios)
Nov 01 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生成唯一的订单函数分享
2015/02/02 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
使用webpack搭建vue项目实现脚手架功能
2019/03/15 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
new修饰符是起什么作用
2015/06/28 面试题
大学生简历的个人自我评价
2013/12/04 职场文书
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
五年级小学生评语
2014/12/26 职场文书
2020优秀员工演讲稿(三篇)
2019/10/17 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
Pyhton模块和包相关知识总结
2021/05/12 Python
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android