小程序wx-charts的项目实用

大家好,我是小九

最近公司的一个小程序项目要用到统计类折线图

趋势图效果
这里写图片描述

于是准备用wx-charts来做这个趋势图

首先从gethub上或者从码云上下载wx-charts.js,传送门:https://gitee.com/Q_Augly/wx-charts.git

打开git地址后我们可以看到wx-charts的一些介绍。

wx-charts是基于canvas用js写的。

支持的图表类型有:

  • 饼图 pie

  • 圆环图 ring

  • 线图 line

  • 柱状图 column

  • 区域图 area

  • 雷达图 radar

点击查看代码分析

我们先来看一下例子

这里写1代码片
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

参数说明

参数说明-wxCharts文档

方法&事件

方法&事件

具体实现

本文以我自己的项目作为实例,给大家讲解一下

  1. 引入wxChart.js

在项目中,我直接引用的wxChart.js

这里写图片描述
  1. 创建画布

打开趋势图的html文件


<view class='head'>

  <view class="head_item" bindtap='torecord'>血压记录</view>

  <view class='line'></view>

  <view class="head_item head_itemActive">趋势图</view>

</view>

<view class='mymain'>

  <view class='qs'>

    <view class="container">

      <view class='container_head'>

        <view class='container_head_top'>

          <view class='prev'>

            <text class='iconfont icon-iconfontzhizuobiaozhun023126'></text>

            <text>上一周</text>

          </view>

          <view class='top_title'>本周6月7日-6月13日</view>

          <view class='next'>

            <text>下一周</text>

            <text class='iconfont icon-jiantouyou'></text>

          </view>

        </view>

        <view class='container_head_main'>

          <view>

            <view class='main_Ttitle'>平均血压值</view>

            <view class='main_main'>138/80</view>

            <view class='main_mintitle'>mmHg</view>

          </view>

          <view>

            <view class='main_Ttitle'>平均心率值</view>

            <view class='main_main'>65</view>

            <view class='main_mintitle'>次/分钟</view>

          </view>

        </view>

      </view>

      <canvas canvas-id="lineCanvas" disable-scroll="true" class="canvas" bindtouchstart="touchHandler"></canvas>

    </view>

  </view>

</view>

wxss:


/* pages/index/lookrecord/lookrecord.wxss */

page {

  background-color: rgba(239, 239, 240, 1);

}

.head_item {

  width: 374rpx;

  text-align: center;

  font-size: 34rpx;

  color: #999;

  letter-spacing: 0;

}

.head_itemActive {

  color: rgba(87, 213, 200, 1);

}

.line {

  width: 2rpx;

  height: 100%;

  background-color: rgba(204, 204, 204, 1);

}

.head {

  width: 100%;

  height: 100rpx;

  background-color: rgba(255, 255, 255, 1);

  border-bottom: 1rpx solid rgba(204, 204, 204, 1);

  display: flex;

  align-items: center;

  justify-content: space-between;

  position: fixed;

  top: 0;

  z-index: 10;

}

.mymain {

  position: absolute;

  width: 100%;

  height: 100%;

  display: block;

  box-sizing: border-box;

  padding-top: 100rpx;

  top: 0;

}

.xyjl {

  width: 100%;

  height: 100%;

  box-sizing: border-box;

  padding: 0rpx 30rpx;

}

.item_title {

  width: 100%;

  height: 91rpx;

  line-height: 90rpx;

  font-size: 26rpx;

  color: #999;

  letter-spacing: 0;

}

.item_main {

  border-radius: 30rpx;

  background-color: rgba(255, 255, 255, 1);

  width: 100%;

  height: auto;

  box-sizing: border-box;

  padding: 0rpx 40rpx;

}

.icon-jiantouyou, .icon-icon_arrow_top, .icon-jiantouxia,

.icon-iconfontzhizuobiaozhun023126 {

  font-size: 30rpx;

  color: rgba(199, 199, 204, 1);

}

.main_title {

  width: 100%;

  height: 250rpx;

  box-sizing: border-box;

  padding: 30rpx 0rpx;

  display: flex;

  align-items: center;

  justify-content: space-between;

}

.main_item {

  width: 100%;

  height: 200rpx;

  box-sizing: border-box;

  padding: 30rpx 0rpx;

  display: flex;

  align-items: center;

  justify-content: space-between;

  border-top: 1rpx solid rgba(216, 216, 216, 1);

}

.title_kind {

  width: 150rpx;

  height: 100%;

  display: flex;

  flex-direction: column;

  justify-content: space-between;

  align-items: center;

}

.kind_title {

  font-size: 26rpx;

  color: #333;

  text-align: center;

  line-height: 30rpx;

}

.kind_number {

  font-size: 34rpx;

  color: #d63030;

  letter-spacing: 0;

  line-height: 45rpx;

}

.kind_numberSussece {

  color: rgba(99, 218, 121, 1);

}

.kind_dw {

  font-size: 26rpx;

  color: #333;

  line-height: 45rpx;

}

.kind_result {

  display: inline-block;

  height: 45rpx;

  padding: 0rpx 20rpx;

  border: 2rpx solid #e68a8a;

  border-radius: 100rpx;

  font-size: 26rpx;

  color: #d73737;

  line-height: 40rpx;

}

.kind_resultSuccess {

  border: 2rpx solid rgba(99, 218, 121, 1);

  color: rgba(99, 218, 121, 1);

}

.qs {

  width: 100%;

  height: 100%;

  box-sizing: border-box;

  padding-top: 80rpx;

}

.container {

  width: 690rpx;

  border-radius: 30rpx;

  background-color: rgba(255, 255, 255, 1);

  height: 950rpx;

  display: flex;

  flex-direction: column;

  box-sizing: border-box;

  font-size: 35rpx;

  color: #333;

  margin: 0 auto;

}

.container_head {

  width: 640rpx;

  margin: 0 auto;

  height: auto;

}

.container_head_top {

  width: 100%;

  height: 100rpx;

  border-bottom: 1rpx solid rgba(216, 216, 216, 1);

  display: flex;

  align-items: center;

  justify-content: space-between;

}

.canvas {

  width: 100%;

  height: 550rpx;

  margin-top: 30rpx;

}

.prev, .next {

  width: 130rpx;

  border-radius: 100rpx;

  display: flex;

  justify-content: space-between;

  font-size: 24rpx;

  align-items: center;

  color: #fff;

  box-sizing: border-box;

  padding: 3rpx 15rpx 0rpx 15rpx;

  line-height: 50rpx;

  background-color: rgba(87, 213, 200, 1);

}

.prev text {

  display: block;

}

.next text {

  display: block;

}

.iconfont {

  font-size: 20rpx;

  color: #fff;

}

.top_title {

  font-size: 26rpx;

  color: #333;

}

.container_head_main {

  width: 100%;

  height: 170rpx;

  display: flex;

  align-items: center;

  justify-content: space-between;

  border-bottom: 1rpx solid rgba(216, 216, 216, 1);

}

.container_head_main view {

  width: 50%;

  display: flex;

  flex-direction: column;

  justify-content: center;

  align-items: center;

}

.main_Ttitle {

  font-size: 26rpx;

  color: #333;

  text-align: center;

  line-height: 50rpx;

}

.main_main {

  font-size: 34rpx;

  color: #333;

  text-align: center;

  font-weight: bold;

  line-height: 40rpx;

}

.main_mintitle {

  font-size: 26rpx;

  color: #333;

  text-align: center;

  line-height: 50rpx;

}

  1. 开始写js

js文件:


// pages/index/lookrecord/lookrecord.js

var wxCharts = require('../../../utils/wxcharts.js');  //引入wxChart文件

var app = getApp();

var lineChart = null;

Page({

  /**

  * 页面的初始数据

  */

  data: {

  },

  torecord() {

    // wx.navigateTo({

    //  url: '../lookrecord/lookrecord',

    // })

    wx.navigateBack({

      delta: 1,

    })

  },

  touchHandler: function (e) {

    lineChart.showToolTip(e, {

      // background: '#7cb5ec',

      format: function (item, category) {

        return category + ' ' + item.name + ':' + item.data

      }

    });

  },

  // createSimulationData: function () {

  //  var categories = [];

  //  var data = [];

  //  for (var i = 6; i > 0; i--) {

  //    categories.unshift('2018-' + (i + 1));

  //    data.push(Math.random() * (20 - 10) + 10);

  //  }

  //  // data[4] = null;

  //  return {

  //    categories: categories,

  //    data: data

  //  }

  // },

  updateData: function (e) {

    // var simulationData = this.createSimulationData();

    // var series = [{

    //  name: '成交量1',

    //  data: simulationData.data,

    //  format: function (val, name) {

    //    return val.toFixed(2) + '万';

    //  }

    // }];

    // lineChart.updateData({

    //  categories: simulationData.categories,

    //  series: series

    // });

  },

  /**

  * 生命周期函数--监听页面加载

  */

  onLoad: function (e) {

    var windowWidth = '', windowHeight='';    //定义宽高

    try {

      var res = wx.getSystemInfoSync();    //试图获取屏幕宽高数据

      windowWidth = res.windowWidth / 750 * 690;  //以设计图750为主进行比例算换

      windowHeight = res.windowWidth / 750 * 550    //以设计图750为主进行比例算换

    } catch (e) {

      console.error('getSystemInfoSync failed!');  //如果获取失败

    }

    lineChart = new wxCharts({    //定义一个wxCharts图表实例

      canvasId: 'lineCanvas',    //输入wxml中canvas的id

      type: 'line',      //图标展示的类型有:'line','pie','column','area','ring','radar'

      categories: ['2018-6-13', '2018-6-14', '2018-6-15', '2018-6-16', '2018-6-17', '2018-6-18', '2018-6-19'],    //模拟的x轴横坐标参数

      animation: true,  //是否开启动画

      series: [{  //具体坐标数据

        name: '收缩压',  //名字

        data: [60,90, 60, 110,120,105,70],  //数据点

        format: function (val, name) {  //点击显示的数据注释

          return val + 'mmHg';

        }

      }, {

        name: '舒张压',

        data: [50, 100, 80, 115, 120, 90, 125],

        format: function (val, name) {

          return val + 'mmHg';

        }

      }, {

        name: '心率',

        data: [60, 70, 90, 105, 120, 130, 95],

        format: function (val, name) {

          return val + '次/分钟';

        }

      }

      ],

      xAxis: {  //是否隐藏x轴分割线

        disableGrid: true,

      },

      yAxis: {      //y轴数据

        title: '数值',  //标题

        format: function (val) {  //返回数值

          return val.toFixed(2);

        },

        min: 30,  //最小值

        max:180,  //最大值

        gridColor: '#D8D8D8',

      },

      width: windowWidth,  //图表展示内容宽度

      height: windowHeight,  //图表展示内容高度

      dataLabel: false,  //是否在图表上直接显示数据

      dataPointShape: true, //是否在图标上显示数据点标志

      extra: {

        lineStyle: 'curve'  //曲线

      },

    });

  },

  /**

  * 生命周期函数--监听页面初次渲染完成

  */

  onReady: function () {

  },

  /**

  * 生命周期函数--监听页面显示

  */

  onShow: function () {

  },

  /**

  * 生命周期函数--监听页面隐藏

  */

  onHide: function () {

  },

  /**

  * 生命周期函数--监听页面卸载

  */

  onUnload: function () {

  },

  /**

  * 页面相关事件处理函数--监听用户下拉动作

  */

  onPullDownRefresh: function () {

  },

  /**

  * 页面上拉触底事件的处理函数

  */

  onReachBottom: function () {

  },

  /**

  * 用户点击右上角分享

  */

  onShareAppMessage: function () {

  },

})

  1. 调制

实际项目当中可能我们的线条的颜色和数据点的形状可能跟默认的不一样怎么办呢?

没关系,我们打开wxCharts.js

var config = {

yAxisWidth: 15,

yAxisSplit: 5,    //这个是把y轴平分成几分的

xAxisHeight: 15,

xAxisLineHeight: 15,

legendHeight: 15,

yAxisTitleWidth: 15,

padding: 12,

columePadding: 3,

fontSize: 10,

// dataPointShape: ['diamond', 'circle', 'triangle', 'rect'],  // 这里是改变数据点的形状的

dataPointShape: ['circle'],

// colors: ['#7cb5ec', '#f7a35c', '#434348', '#90ed7d', '#f15c80', '#8085e9'],  //这里是数据线条以及相应的数据点的颜色

colors: ['#6EB9FF', '#ECB97D','#51DBA2'],

pieChartLinePadding: 25,

pieChartTextPadding: 15,

xAxisTextPadding: 3,

titleColor: '#333333',

titleFontSize: 20,

subtitleColor: '#999999',

subtitleFontSize: 15,

toolTipPadding: 3,

toolTipBackground: '#000000',

toolTipOpacity: 0.7,

toolTipLineHeight: 14,

radarGridCount: 3,

radarLabelTextMargin: 15

};

以上是我使用wxCharts的项目经验,感谢wxChatrs开发人员,请大家多多指教

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容