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


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 控制弹出窗口
Apr 10 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
Dec 16 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
Aug 05 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
Apr 17 Javascript
关于js二维数组和多维数组的定义声明(详解)
Oct 02 Javascript
Vue.js组件tabs实现选项卡切换效果
Dec 01 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
Jul 19 Javascript
基于vue.js无缝滚动效果
Jan 25 Javascript
vue父组件点击触发子组件事件的实例讲解
Feb 08 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
Feb 19 Javascript
JavaScript实现单英文金山打字通
Jul 24 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
Aug 17 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与javascript对多项选择的处理
2006/10/09 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
基于jquery的时间段实现代码
2012/08/02 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
JS随机密码生成算法
2019/09/23 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
python得到单词模式的示例
2018/10/15 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
事业单位请假制度
2014/01/13 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
活动策划求职信模板
2014/04/21 职场文书
协议书样本
2014/04/23 职场文书
社区服务标语
2014/07/01 职场文书
农村门前三包责任书
2014/07/25 职场文书
出国签证在职证明
2014/09/20 职场文书
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android
python在package下继续嵌套一个package
2022/04/14 Python