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


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 相关文章推荐
JQuery从头学起第一讲
Jul 04 Javascript
jquery实现图片灯箱明暗的遮罩效果
Nov 15 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
Nov 19 Javascript
JS实现alert中显示换行的方法
Dec 17 Javascript
ArtEditor富文本编辑器增加表单提交功能
Apr 18 Javascript
Javascript 基础---Ajax入门必看
Jul 06 Javascript
微信小程序 Tab页切换更新数据
Jan 05 Javascript
webpack2.0配置postcss-loader的方法
Aug 17 Javascript
原生JS实现的双色球功能示例
Feb 02 Javascript
angular 实现下拉列表组件的示例代码
Mar 09 Javascript
微信小程序 轮播图实现原理及优化详解
Sep 29 Javascript
JavaScript实现滑动门效果
Jan 18 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
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
php实现点击可刷新验证码
2015/11/07 PHP
Symfony核心类概述
2016/03/17 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
js原型链原理看图说明
2012/07/07 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Python爬取某平台短视频的方法
2021/02/08 Python
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
环境工程专业毕业生求职信
2014/09/30 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL