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

 更新时间:2016年10月24日 14:32:38   投稿:lqh  
这篇文章主要介绍了微信小程序 绘图之饼图实现的相关资料,需要的朋友可以参考下

微信小程序的推出,无疑将会在移动互联网行业里再次掀起风浪。有人会质疑小程序会不会火, 会不会火我不知道, 看微信的用户量即可明白一切。这里就先学习下微信小程序绘图的功能实现。

官方文档: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前端构建工具原理的理解

    这篇文章主要为大家介绍了JavaScript前端构建工具原理的理解分享,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Javascript闭包使用场景原理详细

    Javascript闭包使用场景原理详细

    这篇文章主要介绍了Javascript闭包的使用场景,  由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,闭包就是能够读取其他函数内部变量的函数。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁,下面一起进入文化在哪个了解文章内容
    2021-11-11
  • JavaScript 中有了Object 为什么还需要 Map 呢

    JavaScript 中有了Object 为什么还需要 Map 呢

    Map 是用于存储键值的,而 JavaScript 中对象也是由键值对组成的,那么 Map 存在的意义是什么呢?下面文章小编就来向大家详细介绍吧,需要的朋友可以参考下
    2021-09-09
  • JavaScript异步操作中串行和并行

    JavaScript异步操作中串行和并行

    这篇文章主要介绍了JavaScript异步操作中串行和并行,主要内容是写一下js中es5和es6针对异步函数,串行执行和并行执行的方案。已经串行和并行结合使用的例子。,需要的朋友可以参考一下
    2021-11-11
  • 微信公众号 客服接口的开发实例详解

    微信公众号 客服接口的开发实例详解

    这篇文章主要介绍了微信公众号 客服接口的开发实例详解的相关资料,需要的朋友可以参考下
    2016-09-09
  • 微信小程序(二)Window 配置详细介绍

    微信小程序(二)Window 配置详细介绍

    这篇文章主要介绍了微信小程序(二)Window 配置详细介绍的相关资料,需要的朋友可以参考下
    2016-09-09
  • TypeScript对象解构操作符在Spartacus实际项目开发中的应用解析

    TypeScript对象解构操作符在Spartacus实际项目开发中的应用解析

    这篇文章主要为大家介绍了TypeScript对象解构操作符在Spartacus实际项目开发中的应用解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 带你理解JavaScript 原型原型链

    带你理解JavaScript 原型原型链

    理解js中原型、原型链这个概念,绝对是帮助我们更深入学习js的必要一步,比如,如果js开发者想理解js继承,new关键字原理,甚至封装组件、优化代码,弄明白js中原型、原型链更是前提条件。本篇文章,用最简洁的文字,清楚明白讲解原型链相等关系和原型、原型链存在的意义
    2021-09-09
  • 微信小程序 input表单与redio及下拉列表的使用实例

    微信小程序 input表单与redio及下拉列表的使用实例

    这篇文章主要介绍了微信小程序 input表单与redio及下拉列表的使用实例的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • 使用纯JavaScript封装一个消息提示条功能示例详解

    使用纯JavaScript封装一个消息提示条功能示例详解

    这篇文章主要为大家介绍了使用纯JavaScript封装一个消息提示条功能示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02

最新评论