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


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 相关文章推荐
js切换div css注意的细节
Dec 10 Javascript
js关于字符长度限制的问题示例探讨
Jan 24 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
Jun 23 Javascript
node.js集成百度UE编辑器
Feb 05 Javascript
JavaScript将字符串转换为整数的方法
Apr 14 Javascript
jQuery实现hover合成事件的方法
Aug 06 Javascript
浅谈如何实现easyui的datebox格式化
Jun 12 Javascript
vue中渐进过渡效果实现
Oct 27 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
Jan 18 Javascript
Vue获取DOM元素样式和样式更改示例
Mar 07 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
Jan 11 Javascript
mpvue全局引入sass文件的方法步骤
Mar 06 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
星际玩家的三大定律
2020/03/04 星际争霸
php 学习资料零碎东西
2010/12/04 PHP
写的htc的数据表格
2007/01/20 Javascript
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
2017/04/28 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
python2.7实现邮件发送功能
2018/12/12 Python
Python中extend和append的区别讲解
2019/01/24 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
python重要函数eval多种用法解析
2020/01/14 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
python代码实现图书管理系统
2020/11/30 Python
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
酒店管理自荐信
2013/10/23 职场文书
八年级历史教学反思
2014/01/10 职场文书
装修协议书范本
2014/04/21 职场文书
运动会拉拉队口号
2014/06/09 职场文书
2015年女职工工作总结
2015/05/15 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
cypress测试本地web应用
2022/06/01 Javascript