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


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 相关文章推荐
isArray()函数(JavaScript中对象类型判断的几种方法)
Nov 26 Javascript
jQuery中[attribute*=value]选择器用法实例
Dec 31 Javascript
快速学习AngularJs HTTP响应拦截器
Dec 31 Javascript
javascript创建对象、对象继承的实用方式详解
Mar 08 Javascript
jQuery动态添加
Apr 07 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
Oct 31 Javascript
JavaScript获取服务器时间的方法详解
Dec 11 Javascript
基于javaScript的this指向总结
Jul 22 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
Jan 21 Javascript
浅谈Vue.js组件(二)
Apr 09 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
Jul 04 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
Jul 25 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 print类函数使用总结
2010/06/25 PHP
php去除HTML标签实例
2013/11/06 PHP
nginx 设置多个站跨域
2021/03/09 Servers
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
浅谈js闭包理解
2019/03/28 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
vue 更改连接后台的api示例
2019/11/11 Javascript
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
python实发邮件实例详解
2019/11/11 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
网络工程师职业规划
2014/02/10 职场文书
投资建议书模板
2014/05/12 职场文书
创先争优标语
2014/06/27 职场文书
文秘应届生求职信
2014/07/05 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
三八妇女节慰问信
2015/02/14 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书