您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > 小程序

微信小程序实现echarts并兼容IOS

时间:2022-06-22 10:08:09  来源:  作者:东少笔记

示例简介

本文介绍使用ec-canvas实现小程序图表功能,支持切换更新数据并在IOS顺畅使用。

Tips:本文只介绍柱形图,其它图形类似,具体可查看Github上的ecomfe/echarts-for-weixin项目。

 

实现过程

1、文件index.wxml和index.wxss代码如下,这一块比较简单,可自行查看,不做过多分析;

<view class="contAIner">
  <view class="item-head">
    <view class="tit">月份统计</view>
    <picker mode="selector" bindchange="chooseChange" value="{{chooseIndex}}" range="{{choossArr}}" range-key="value" name="chooseType" class="picker-box">
      <view class="picker">
        {{choossArr[chooseIndex].value}}
      </view>
      <image src="../../images/arrow.png"></image>
    </picker>
  </view>
  <view class="echart-heig">
    <image src="{{echartImgSrc}}" class="echart-img" wx:if="{{echartImgSrc1 != ''}}"></image>
    <ec-canvas id="mychart" canvas-id="mychart-bar" ec="{{ ec }}" class="{{echartImgSrc != '' ? 'hide' : ''}}"></ec-canvas>
  </view>
</view>
.container {
  height: 100%;
  display: flex;
  flex-direction: column;
}


.item-head {
  display: flex;
  padding: 40rpx 30rpx 20rpx;
}


.item-head .tit {
  font-size: 30rpx;
  margin: 6rpx 14rpx 0 0;
}


.item-head .picker-box {
  display: flex;
  width: 196rpx;
  height: 50rpx;
  font-size: 26rpx;
  line-height: 50rpx;
  border-radius: 6rpx;
  border: 2rpx solid #e6e6e6;
}


.item-head .picker-box .picker {
  display: inline-block;
  flex: 0.7;
  width: 140rpx;
  text-align: left;
  margin-left: 20rpx;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}


.item-head .picker-box image {
  flex: 0.3;
  width: 12rpx;
  height: 8rpx;
  margin-top: -34rpx;
  vertical-align: middle;
}


.item-head .picker-box.ios image {
  margin-top: -10rpx;
}


.hide {
  display: none !important;
}


.echart-img {
  width: 100%;
  height: 100%;
}


.echart-heig {
  width: 100%;
  height: 1020rpx;
}

2、文件index.js存放所有功能的逻辑代码,代码实现如下:

1)函数chooseChange用于获取切换数据后的月份;

2)函数getFinishCount用来根据月份判断使用的数据;为了方便使用简单的数据切换,项目情况下,一般都是调用接口获取数据;有个特别要注意的,就是把echartImgSrc的值清空,不然没办法更新数据;

3)函数initEcharts是示例的核心,数据结构可自行查看官网,更新数据使用了chart.setOption(option);但这里有个比较特别的代码,就是先使用canvasToTempFilePath把指定区域生成图片,然后赋值echartImgSrc来重新渲染页面,因为直接用ec-canvas渲染,在IOS滑动会很卡。

import * as echarts from '../../ec-canvas/echarts';
const App = getApp();


Page({
  data: {
    villageArr: [],
    villageArr1: [{
        value1: 90,
        value2: 78,
        name: 'aaa'
      },
      {
        value1: 145,
        value2: 120,
        name: 'bbb'
      },
      {
        value1: 98,
        value2: 87,
        name: 'ccc'
      },
      {
        value1: 126,
        value2: 102,
        name: 'ddd'
      },
      {
        value1: 90,
        value2: 90,
        name: 'eee'
      },
      {
        value1: 108,
        value2: 100,
        name: 'fff'
      },
      {
        value1: 134,
        value2: 120,
        name: 'ggg'
      }
    ],
    villageArr2: [{
        value1: 50,
        value2: 45,
        name: 'aaa'
      },
      {
        value1: 40,
        value2: 36,
        name: 'bbb'
      },
      {
        value1: 70,
        value2: 67,
        name: 'ccc'
      },
      {
        value1: 80,
        value2: 54,
        name: 'ddd'
      },
      {
        value1: 77,
        value2: 55,
        name: 'eee'
      },
      {
        value1: 66,
        value2: 57,
        name: 'fff'
      },
      {
        value1: 80,
        value2: 50,
        name: 'ggg'
      }
    ],
    ec: {},
    echartImgSrc: '', // canvas在ios下滑动问题,目前只能将echarts图表渲染完成后再生成为图片展示。
    chooseIndex: 0, // 选中的下标
    choossArr: [{
        value: '1月',
        id: 1
      },
      {
        value: '2月',
        id: 2
      }
    ]
  },
  // 切换不同数据
  getFinishCount: function (month) {
    let self = this;
    if (month === 1) {
      this.setData({
        villageArr: this.data.villageArr1,
        echartImgSrc: ''
      });
    } else {
      this.setData({
        villageArr: this.data.villageArr2,
        echartImgSrc: ''
      });
    }    
    self.initEcharts();
  },
  // 数据渲染
  initEcharts: function (canvas, width, height) {
    let that = this;
    this.selectComponent('#mychart').init((canvas, width, height) => {
      // 初始化图表
      const chart = echarts.init(canvas, null, {
        width: width,
        height: height
      });
      let villageArr = that.data.villageArr;
      let villageArrName = [];
      let villageArrValue1 = [];
      let villageArrValue2 = [];


      villageArr.map(function (item, index) {
        villageArrName.push({
          value: item.name,
          id: index
        });
        villageArrValue1.push({
          value: item.value1
        });
        villageArrValue2.push({
          value: item.value2
        });
      })
      this.setData({
        villageArr: villageArr
      })


      let option = {
        color: ["#58a7f8", "#63e669"],
        legend: {
          data: ['上报量', '完成量'],
          top: 0,
          left: 10,
          icon: 'roundRect',
          itemWidth: 13,
          itemHeight: 13,
          itemGap: 20,
        },
        grid: {
          left: 15,
          right: 25,
          bottom: 0,
          top: 35,
          containLabel: true
        },
        xAxis: {
          type: 'value',
          axisTick: {
            show: false
          },
          axisLine: {
            show: false,
          },
          splitLine: {
            lineStyle: {
              color: '#e6e6e6'
            }
          },
          axisLabel: {
            textStyle: {
              color: '#6a737d'
            }
          }
        },
        yAxis: {
          type: 'category',
          axisTick: {
            show: false
          },
          axisLine: {
            show: false,
          },
          axisLabel: {
            textStyle: {
              color: '#6a737d',
              fontSize: 11,
              align: 'right',
            },
            formatter: function (value, index) {
              if (value.length > 6) return value.slice(0, 6) + '...';
              else return value;
            }
          },
          data: villageArrName
        },
        series: [{
            name: '上报量',
            type: 'bar',
            barWidth: 12,
            barGap: '-100%',
            data: villageArrValue1
          },
          {
            name: '完成量',
            type: 'bar',
            barWidth: 12,
            data: villageArrValue2
          }
        ]
      };


      chart.on('finished', () => {
        that.selectComponent('#mychart').canvasToTempFilePath({
          success: res => {
            that.setData({
              echartImgSrc: res.tempFilePath
            })
            wx.hideLoading();
          },
          fail: res => console.log('转换图片失败', res)
        });
      })


      chart.setOption(option);
      return chart;
    });
  },
  // 选项改变触发
  chooseChange: function (e) {
    wx.showLoading({
      title: '加载中',
      mask: true
    });
    this.setData({
      chooseIndex: e.detail.value
    })
    let month = this.data.choossArr[e.detail.value].id;
    this.getFinishCount(month);
  },
  // 加载页面
  onLoad: function () {
    wx.showLoading({
      title: '加载中',
      mask: true
    });
    // 默认第一月数据
    this.getFinishCount(1);
  }
});


Tags:echarts   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Python数据可视化:使用pyecharts创建交互式图表
数据可视化是数据分析和呈现的重要组成部分。通过可视化,数据可以更容易地被理解和解释。Python中有许多强大的数据可视化工具,其中之一是pyecharts,它是一个基于Echarts库的Py...【详细内容】
2023-10-28  Search: echarts  点击:(143)  评论:(0)  加入收藏
微信小程序,实现Echarts,并获取数据渲染
1、ehcats组件库可自行到echats官网下载,下载好之后放到你的项目包里面。下载地址: https://github.com/ecomfe/echarts-for-weixin2、echarts.json 部分首先在json文件里引入...【详细内容】
2023-04-04  Search: echarts  点击:(120)  评论:(0)  加入收藏
微信小程序实现echarts并兼容IOS
示例简介本文介绍使用ec-canvas实现小程序图表功能,支持切换更新数据并在IOS顺畅使用。Tips:本文只介绍柱形图,其它图形类似,具体可查看GitHub上的ecomfe/echarts-for-weixin项...【详细内容】
2022-06-22  Search: echarts  点击:(696)  评论:(0)  加入收藏
基于Django结合Pyecharts实现数据可视化
一、前言我们都知道python上的一款可视化工具matplotlib,当然百度开源的一个可视化JS工具-Echarts也非常好用,可视化类型非常多,但是得通过导入js库在Java Web项目上运行,平时用...【详细内容】
2022-04-22  Search: echarts  点击:(419)  评论:(0)  加入收藏
pyecharts绘制地图实战案例
# pip install pyechartsfrom pyecharts import options as optsfrom pyecharts.charts import Map# 实例化地图对象china_map = Map()# 各省份的数据data = [ [&#39;广...【详细内容】
2022-02-24  Search: echarts  点击:(368)  评论:(0)  加入收藏
Python 数据可视化神器—Pyecharts
前言Echarts 是百度开源的一款数据可视化 JS 工具,数据可视化类型十分丰富,但是得通过导入 js 库在 Java Web 项目上运行。作为工作中常用 Python 的选手,不能不知道这款数据可...【详细内容】
2022-02-21  Search: echarts  点击:(430)  评论:(0)  加入收藏
Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化
利用Python实现中国地铁数据可视化。废话不多说。让我们愉快地开始吧~开发工具Python版本:3.6.4相关模块:requests模块;wordcloud模块;pandas模块;numpy模块;jieba模块;pyecharts模...【详细内容】
2021-12-08  Search: echarts  点击:(613)  评论:(0)  加入收藏
基于 Vue+Echarts 大屏可视化数据平台
今天给大家分享一款超不错的Vue可视化图表数据大屏Dashboard。 基于Vue+Echarts+ElementUI构建的数据图表可视化大屏,star高达1.5K+。包含柱状图、折线图、热力图、预览面板...【详细内容】
2020-10-19  Search: echarts  点击:(4123)  评论:(0)  加入收藏
用pyecharts制作北京市公交线路动态图
今天教大家用pyecharts制作北京市公交线路动态图,这应该是全网唯一一篇能正常运行的教程 一、获取百度秘钥首先,本项目需要引用百度地图api,所以需要先注册获取百度开放平台秘...【详细内容】
2020-09-09  Search: echarts  点击:(364)  评论:(0)  加入收藏
Python数据可视化:PyQt5 + ECharts框架实例
引言对于Python下桌面软件的开发已经有了很多数据可视化的库,如Matplotlib、Seaborn、Pyqtgraph、Plotly等等,但这些库更适合于后端程序员的软件开发。实际上在前端网页开发方...【详细内容】
2020-05-06  Search: echarts  点击:(1542)  评论:(0)  加入收藏
▌简易百科推荐
京东小程序数据中心架构设计与最佳实践
一、京东小程序是什么京东小程序平台能够提供开放、安全的产品,成为品牌开发者链接京东内部核心产品的桥梁,致力于服务每一个信任我们的外部开发者,为不同开发能力的品牌商家提...【详细内容】
2024-03-27  dbaplus社群    Tags:小程序   点击:(19)  评论:(0)  加入收藏
我们一起解锁小程序开发新姿势
如今,鸿蒙开发日益受到广大开发者的关注,而小程序开发也早已成为互联网领域的热门话题。那么,我们不禁要问:是否有可能将这两者融为一体,将小程序开发的便捷与高效带入鸿蒙生态中...【详细内容】
2024-03-20  前端充电宝  微信公众号  Tags:小程序   点击:(23)  评论:(0)  加入收藏
一段微信小程序前端与后端连接的代码,带注解
微信小程序的前端和后端连接通常涉及到使用微信小程序提供的网络请求API与后端服务器进行通信。以下是一个简单的示例,展示如何使用微信小程序的前端代码向后端发送请求并处...【详细内容】
2024-01-24    简易百科  Tags:代码   点击:(58)  评论:(0)  加入收藏
小程序必须要安装部署SSL证书吗?
自2017年9月21日,微信发布一则《关于公众平台接口不再支持HTTP方式调用的公告》。明确表示,为保证数据传输安全,提高业务安全性,公众平台不再支持HTTP方式调用。应避免影响正常...【详细内容】
2024-01-02  云诏    Tags:小程序   点击:(75)  评论:(0)  加入收藏
一文了解什么是微信小程序
如果您无需下载和管理即可获得像原生 iOS 或 Android APP 一样流畅的体验会怎样?腾讯通过微信小程序实现了这一替代方案。一、什么是微信小程序?它们与原生应用程序和 H5 迷你...【详细内容】
2023-12-26  小文智能    Tags:微信小程序   点击:(100)  评论:(0)  加入收藏
小程序开发需要多少钱?小程序开发的真实成本:报价案例、费用价格表与开发周期解析
分享一个上海客户的微信小程序定制开发的需求,销售课程与相关商品。项目分为后台管理系统和小程序前端,功能不是太复杂,周期大概1个月,费用3万。大家可能比较关心几个地方,比如一...【详细内容】
2023-12-11  久码小程序开发  今日头条  Tags:小程序   点击:(119)  评论:(0)  加入收藏
小程序技术分享:安全机制与运行机制
小程序凭借其高曝光率、开发成本低、运行更流畅等优势和特点,一经推出就被广泛使用,面对小程序的火爆,自然而然地,就有很多开发者转战小程序领域,本文主要带大家了解下小程序运行...【详细内容】
2023-12-07  前端实习生Findan    Tags:小程序   点击:(140)  评论:(0)  加入收藏
微信小程序的编译原理
2021年来,随着科技的进步,人们的生活水平也在不断提高。现在,微信小程序已经成为了现代人生活中不可或缺的一部分,它可以帮助我们更方便地查找信息,购物,预订机票和酒店,进行社交等...【详细内容】
2023-12-06  前端实习生Findan    Tags:小程序   点击:(133)  评论:(0)  加入收藏
模板小程序和订制开发小程序的区别?
相比外卖APP,外卖小程序是不用下载到手机的,所以对于用户来说更方便一点。简单方便的程序用户才更愿意使用。现在不少商家越来越重视外卖小程序开发,想通过外卖小程序冲进这片...【详细内容】
2023-11-24  重庆洺宸传媒    Tags:小程序   点击:(240)  评论:(0)  加入收藏
一分钟学会用宝塔面板搭建小程序
宝塔面板搭建小程序怎样用?想要使用宝塔面板搭建小程序?这里是实用教程,帮助您快速上手。在本教程中,我们将扼要了解宝塔面板的基础知识,并一步步演示怎么搭建一个小程序。第一步...【详细内容】
2023-11-15    网络  Tags:小程序   点击:(196)  评论:(0)  加入收藏
站内最新
站内热门
站内头条