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


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闭包 新手版
Dec 28 Javascript
Fixie.js 自动填充内容的插件
Jun 28 Javascript
js 如何实现对数据库的增删改查
Nov 23 Javascript
js用typeof方法判断undefined类型
Jul 15 Javascript
JavaScript定义类和对象的方法
Nov 26 Javascript
JavaScript使用Prototype实现面向对象的方法
Apr 14 Javascript
JS延时提示框实现方法详解
Nov 26 Javascript
angularjs自定义ng-model标签的属性
Jan 21 Javascript
分分钟玩转Vue.js组件(二)
Mar 01 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
Dec 03 Javascript
vue父子组件通信的高级用法示例
Aug 29 Javascript
分享8个JavaScript库可更好地处理本地存储
Oct 12 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超级全局变量
2010/01/26 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
JavaScript 原型链学习总结
2010/10/29 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Python+django实现文件上传
2016/01/17 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
python的继承知识点总结
2018/12/10 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
年终总结会议主持词
2014/03/17 职场文书
高三英语教学计划
2015/01/23 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
2015小学师德工作总结
2015/07/21 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
关于python中模块和重载的问题
2021/11/02 Python
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫