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


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 相关文章推荐
Dom操作之兼容技巧分享
Sep 20 Javascript
js自执行函数的几种不同写法的比较
Aug 16 Javascript
js控制CSS样式属性语法对照表
Dec 11 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
Apr 16 Javascript
禁用页面部分JavaScript方法的具体实现
Jul 31 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
Jan 02 Javascript
浅析jQuery中使用$所引发的问题
May 29 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
Jul 07 Javascript
浅谈对于react-thunk中间件的简单理解
May 01 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
Aug 04 Javascript
SpringBoot在yml配置文件中配置druid的操作
Nov 16 Javascript
详解TS数字分隔符和更严格的类属性检查
May 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
php+mysql写的简单留言本实例代码
2008/07/25 PHP
浅谈json_encode用法
2015/03/05 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
小程序实现tab标签页
2020/11/16 Javascript
python使用心得之获得github代码库列表
2014/06/25 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
python实现批量修改文件名
2020/03/23 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
一套软件开发工程师笔试题
2015/05/18 面试题
六查六看心得体会
2014/10/14 职场文书
写给老师的保证书
2015/05/09 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android