文档章节

微信小程序绘图课程之饼图

秀杰
 秀杰
发布于 2016/10/04 17:40
字数 512
阅读 474
收藏 0

本课程的源码请移步文章末尾

输入图片说明

官方文档: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()
    });
  }
})

源码下载:扫描下方二维码->回复1004

对小程序开发有趣的朋友可以加QQ群: 581513218,微信: small_application,陆续还将推出更多作品。

订阅号:huangxiujie85

输入图片说明

© 著作权归作者所有

秀杰
粉丝 153
博文 94
码字总数 50956
作品 0
瑞安
iOS工程师
私信 提问
微信小程序图表插件(wx-charts)

微信小程序图表插件(wx-charts)基于canvas绘制,体积小巧支持图表类型饼图、线图、柱状图 、区域图等图表图形绘制,目前wx-charts是微信小程序图表插件中比较强大好使的一个。 wx-charts基...

飞翔的熊blabla
2018/11/06
0
0
wx-charts 微信小程序图表插件

微信小程序图表插件(wx-charts)基于canvas绘制,体积小巧,支持图表类型饼图、线图、柱状图 、区域图等图表图形绘制,目前wx-charts是微信小程序图表插件中比较强大好使的一个 支持图标类型...

飞翔的熊blabla
2018/10/06
0
0
小程序 大假期,技术猿国庆假期的正确打开方式…

明天(10月1日)就是国庆黄金7天假了。作为技术猿,除了美美的睡一觉好像也没啥别的事了。与其窝在家里玩手机刷朋友圈,不如做个小程序玩玩。 微信小程序开发正当时,没有内测资格不要紧。这...

凝小紫
2016/09/30
5.8K
11
海报生成,但是微信小程序的绘图不能使用自定义弹窗,怎么实现功能

微信小程序,有一个需求 做海报生成,编写自己的文字内容保存海报生成图片,使用微信小程序的绘图api无法使用自定义弹窗实现文字内容修改,自定义弹窗层级在原生组件下层,有什么办法实现海报...

鱼被吃了
2018/04/26
472
1
小程序大全第一行代码:目录(不断更新)

小程序大全第一行代码 小程序官方文档:https://developers.weixin.qq.com/miniprogram/dev/ 前言 为什么要学习微信小程序呢?作为一位普普通通的程序员没人告诉你为什么的,只有你自己知道,...

达叔小生
2018/09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部