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


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实现的listview效果
Apr 28 Javascript
Firefox window.close()的使用注意事项
Apr 11 Javascript
js监听表单value的修改同步问题,跨浏览器支持
Dec 31 Javascript
JavaScript中判断函数是new还是()调用的区别说明
Apr 07 Javascript
jquery阻止冒泡事件使用模拟事件
Sep 06 Javascript
详解JS函数重载
Dec 04 Javascript
JS实现仿PS的调色板效果完整实例
Dec 21 Javascript
vue-router 组件复用问题详解
Jan 22 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
vue项目中引入Sass实例方法
Aug 27 Javascript
node后端服务保活的实现
Nov 10 Javascript
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
用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发电子邮件
2006/10/09 PHP
php模板原理讲解
2013/11/13 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
javascript中的括号()用法小结
2014/04/14 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
python 生成目录树及显示文件大小的代码
2009/07/23 Python
python实现的登录和操作开心网脚本分享
2014/07/09 Python
Python实现获取网站PR及百度权重
2015/01/21 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
Python实现时间序列可视化的方法
2019/08/06 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
jupyter notebook tensorflow打印device信息实例
2020/04/20 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
六十大寿答谢词
2014/01/12 职场文书
年度考核自我评价
2014/01/25 职场文书
京剧自荐信
2014/01/26 职场文书