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


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 面向对象编程(coolshell)
Mar 18 Javascript
parentElement,srcElement的使用小结
Jan 13 Javascript
将中国标准时间转换成标准格式的代码
Mar 20 Javascript
JS打字效果的动态菜单代码分享
Aug 21 Javascript
jQuery过滤特殊字符及JS字符串转为数字
May 26 Javascript
JavaScript中apply方法的应用技巧小结
Sep 29 Javascript
js读取json文件片段中的数据实例
Mar 09 Javascript
vue项目中引入noVNC远程桌面的方法
Mar 05 Javascript
Vuex中实现数据状态查询与更改
Nov 08 Javascript
如何优雅地在Node应用中进行错误异常处理
Nov 25 Javascript
JS实现碰撞检测效果
Mar 12 Javascript
关于React Native 无法链接模拟器的问题
Jun 21 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守护进程(Daemon)
2015/12/30 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
Position属性之relative用法
2015/12/14 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
财务人员求职自荐书范文
2014/02/10 职场文书
读书小明星事迹材料
2014/05/03 职场文书
迎七一演讲稿
2014/09/12 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
质量保证书怎么写
2015/02/27 职场文书
Python编写nmap扫描工具
2021/07/21 Python
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫