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


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 相关文章推荐
IE8 原生JSON支持
Apr 13 Javascript
Array.prototype 的泛型应用分析
Apr 30 Javascript
JS实现很酷的水波文字特效实例
Feb 26 Javascript
微信小程序学习(4)-系统配置app.json详解
Jan 12 Javascript
jQuery实现最简单实用的分秒倒计时
Feb 05 Javascript
vue快捷键与基础指令详解
Jun 01 Javascript
Vue底层实现原理总结
Feb 17 Javascript
Vue仿支付宝支付功能
May 25 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
May 22 Javascript
Vue中img的src是动态渲染时不显示的解决
Nov 14 Javascript
vue倒计时刷新页面不会从头开始的解决方法
Mar 03 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
Jun 22 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
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
PHP的FTP学习(二)
2006/10/09 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
浅谈Angular路由复用策略
2017/10/04 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
python self,cls,decorator的理解
2009/07/13 Python
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
python中requests模块的使用方法
2015/04/08 Python
python中的格式化输出用法总结
2016/07/28 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
python画双y轴图像的示例代码
2019/07/07 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
护士试用期自我鉴定
2014/02/08 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
聚会通知怎么写
2015/04/23 职场文书
十月围城观后感
2015/06/08 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
go语言中http超时引发的事故解决
2021/06/02 Golang