微信小程序 uCharts的使用方法

这篇具有很好参考价值的文章主要介绍了微信小程序 uCharts的使用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

微信小程序项目需要渲染一个柱状图,使用uCharts组件完成

uCharts官网指引👉:uCharts官网 - 秋云uCharts跨平台图表库

二、实现效果

微信小程序 uCharts的使用方法,微信小程序,小程序

三、具体使用

进入官网查看指南,有两种方式进行使用:分别是原生方式与组件方式

3.1、原生方式

第一步:获取u-charts.js

获取方式一:通过码云 uCharts 项目开源地址获取 u-charts.js

https://gitee.com/uCharts/uCharts

获取方式二:通过 npm 命令 npm i @qiun/ucharts 安装

安装成功后使用 import 或 require 进行引用

备注:我使用的是第二种方式,npm下载后,再通过import使用的

第二步:引入u-charts.js文件在项目中使用

微信小程序 uCharts的使用方法,微信小程序,小程序

<template>
  <view>
    <canvas canvas-id="myid" id="myid" class="charts" @tap="tap" />
  </view>
</template>

<script>
import uCharts from '../../node_modules/@qiun/ucharts/u-charts'
var uChartsInstance = {}
export default {
  data() {
    return {
      cWidth: 750,
      cHeight: 500
    }
  },
  onReady() {
    //这里的 750 对应 css .charts 的 width
    this.cWidth = uni.upx2px(750)
    //这里的 500 对应 css .charts 的 height
    this.cHeight = uni.upx2px(500)
    this.getServerData()
  },
  methods: {
    getServerData() {
      //模拟从服务器获取数据时的延时
      setTimeout(() => {
        let res = {
          categories: ['2016', '2017', '2018', '2019', '2020', '2021'],
          series: [
            {
              name: '目标值',
              data: [35, 36, 31, 33, 13, 34]
            },
            {
              name: '完成量',
              data: [18, 27, 21, 24, 6, 28]
            }
          ]
        }
        this.drawCharts('myid', res)
      }, 500)
    },
    drawCharts(id, data) {
      const ctx = uni.createCanvasContext(id, this)
      uChartsInstance[id] = new uCharts({
        type: 'column',
        context: ctx,
        width: this.cWidth,
        height: this.cHeight,
        categories: data.categories,
        series: data.series,
        xAxis: {
          disableGrid: true
        },
        yAxis: {
          data: [{ min: 0 }]
        },
        extra: {
          column: {
            type: 'group'
          }
        }
      })
    },
    tap(e) {
      uChartsInstance[e.target.id].touchLegend(e)
      uChartsInstance[e.target.id].showToolTip(e)
    }
  }
}
</script>

<style scoped>
.charts {
  width: 750rpx;
  height: 500rpx;
}
</style>

3.2、组件方式

第一步:使用 HBuilderX 导入插件

uniapp插件地址指引👉:秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场 

微信小程序 uCharts的使用方法,微信小程序,小程序第二步:在需要使用图表的地方引入组件

<template>
  <view class="charts-box">
    <qiun-data-charts type="column" :chartData="chartData" />
  </view>
</template>

<script>
export default {
  data() {
    return {
      chartData: {}
    }
  },
  onReady() {
    this.getServerData()
  },
  methods: {
    getServerData() {
      //模拟从服务器获取数据时的延时
      setTimeout(() => {
        let res = {
          categories: ['2016', '2017', '2018', '2019', '2020', '2021'],
          series: [
            {
              name: '目标值',
              data: [35, 36, 31, 33, 13, 34]
            },
            {
              name: '完成量',
              data: [18, 27, 21, 24, 6, 28]
            }
          ]
        }
        this.chartData = JSON.parse(JSON.stringify(res))
      }, 500)
    }
  }
}
</script>

<style scoped>
.charts-box {
  width: 100%;
  height: 300px;
}
</style>

备注:需要给元素设置宽高,否则图表无法显示

四、项目中bug补充

4.1、图表被遮挡时,切换按钮图表会上移

4.1.1、bug描述

在微信小程序中使用uCharts做柱状图,进入页面后滑动图表,此时图表在可视区域被遮挡了显示不全,点击下方的切换按钮,图表会上移,脱离原本位置,后面再切回到第一个按钮会回归到正常位置

图片1是切换按钮后图表上移(PS:错误版本,需改成图片2的效果)

图片2是正常情况下切换按钮图表位置不动(PS:这版是已经修改成功的状态)

微信小程序 uCharts的使用方法,微信小程序,小程序微信小程序 uCharts的使用方法,微信小程序,小程序

4.1.2、问题分析

查看代码发现,在组件挂载时已经获取了按钮1下的接口数据(每个按钮下会展示数据列表),在切换按钮时,并对按钮2和按钮3都发起了请求,所以在切换按钮2和按钮3时又触发重绘。

为什么点按钮1时图表不会上移?是因为第一次进入页面组件挂载已经获取了按钮1的数据,所以在切换回按钮1时不会重新发请求触发重绘

理解了这个问题之后,我便将每个按钮的请求都放在组件挂载时获取,切换按钮只是重新赋值index值

4.2、图表数据百分比显示

4.2.1、需求描述

希望使用条形图展示收缴率,收缴率是以百分比形式展示的,因接口返回的是数值,如[20,0.8,55,90.97,7],需要转换下以百分比形式,如下效果:

微信小程序 uCharts的使用方法,微信小程序,小程序

4.2.2、具体步骤

ucharts的过滤方式为format,小程序中使用format,但是不支持传递function函数,可以传递字符串,需要手动改下ucharts文档

①文档路径:uni_modules/qiun-data-charts/js-sdk/u-charts/config-ucharts

②在config-ucharts文件中找到formatter配置

百分比修改为"yAxisDemoMix":function(val){return val.toFixed(0)+’%’}

//下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换
  "formatter":{
    "yAxisDemo1":function(val){return val+'元'},
    "yAxisDemoMix":function(val){return val.toFixed(0)+'%'}, //→新加的代码,配置百分比的
    "xAxisDemo1":function(val){return val+'年'},
    "xAxisDemo2":function(val){return formatDateTime(val,'h:m')},
    "seriesDemo1":function(val){return val+'元'},
    "tooltipDemo1":function(item, category, index, opts){
      if(index==0){
      	return '随便用'+item.data+'年'
      }else{
      	return '其他我没改'+item.data+'天'
      }
    },
    "pieDemo":function(val, index, series){
      if(index !== undefined){
        return series[index].name+':'+series[index].data+'元'
      }
				},
				"xAxisLineFeed":function(val){
				 	return val.split("-").join("\n");
				},
  },

③组件中使用:

series数组中中加上----->format:'yAxisDemoMix'

 <view class="charts">
    <qiun-data-charts 
     type="bar"
     :opts="opts"
     :chartData="chartData"
     />
 </view>
   getServerData(billTypeStringArray,receiveRatioArray) {
      //模拟从服务器获取数据时的延时
      setTimeout(() => {
        //模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
        let res = {
            categories:[],
            series: [
              {
                name: "收缴率",
                data:[],
                format:'yAxisDemoMix'//格式化使用
              }
            ]
          };
        this.chartData = JSON.parse(JSON.stringify(res));
      }, 500);
    },

4.2.3、bug展现:收缴率在99.99%的时候数据展示不全

①问题描述

因x轴线不够,导致收缴率是99.99%的时候展示不全,%号没有展示出来;原思路是给X轴push几条空数据,让X轴线拉长,这样即使在99.99%的时候也能在x轴线内展示;

微信小程序 uCharts的使用方法,微信小程序,小程序

但是!!!因数据是从接口获取的,X轴和Y轴数据是一一对应的,如果push X轴会改变展示的数据值,所以考虑另外一种方法,修改padding值

②解决办法:修改padding值

原padding值是从官网示例文档直接复制过来的,文档padding是:[15,30,0,5],更改为:padding: [15,55,0,5],具体调整值可根据需求来定,调整顺序可根据官网的说明

  opts: {
        color: ["#1890FF","#91CB74","#FAC858","#EE6666","#73C0DE","#3CA272","#FC8452","#9A60B4","#ea7ccc"],
        padding: [15,55,0,5],//修改后的值
        enableScroll: false,
        legend: {},
        xAxis: {}
        }

微信小程序 uCharts的使用方法,微信小程序,小程序

4.3、解决canvas层级过高,覆盖其他标签问题

4.3.1、问题描述

下拉框是固定在顶部的,当下面的图表向上滑动时,需求是文字和图表被下拉框隐藏,在微信开发者工具中调试是正常的,在真机调试的时候文字内容会默认隐藏掉,但canvas图表会遮盖下拉框,主要是canvas层级过高的原因导致的

微信小程序 uCharts的使用方法,微信小程序,小程序

4.3.2、将canvas图表更换成图片 

使用:uni.canvasToTempFilePath({})

具体代码如下

<view >
  <canvas canvas-id="progress" v-if="!canvasSrc" id="progress" disable-scroll="true"
        :style="{ width: cWidth + 'px', height: cHeight + 'px' }">
 </canvas>
<image :src="canvasSrc" v-if="canvasSrc" :style="{ width: cWidth + 'px', height: cHeight + 'px' }"></image>
</view>

export default {
data() {
	 return {
		canvasSrc: '',
		}
	},
onMounted(){
 setTimeout(() => {
        let self = this;//这里一定要转换一下,涉及到this指向问题
        uni.canvasToTempFilePath({
          x: 0,
          y: 0,
          canvasId:'progress',
          success:function(res){
            self.canvasSrc = res.tempFilePath
            console.log('rescanvas',res);
            console.log('this.canvasSrc',this.canvasSrc);
        
          }
        })
      }, 1000);

}
}

 备注:在延时器内一定要转换this,涉及到this指向问题,我刚开始没转,花了很长时间才找到问题,切记!!!

4.3.3、利用cover-view

cover-view | uni-app官网

最后,👏👏 😀😀😀 👍👍 文章来源地址https://www.toymoban.com/news/detail-745126.html

到了这里,关于微信小程序 uCharts的使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序setData注意事项,使用方法

    1..微信小程序开发中,为了减少data和视图层数据表现不一致,全部采用setData方法修改值。 setData函数注意事项 1..直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。 2..单次设罟的数据不能超过1024kB,请尽量避免一次设罟过多的数据, 3..请

    2024年02月16日
    浏览(43)
  • 微信小程序里使用SVG矢量图标方法

    微信小程序里使用SVG矢量图标有2种引入方法: 一、SVG图标转换为BASE64编码 可以在百度搜索’svg在线转BASE64’(可能会有问题,如下) 如下方式 同时还需要添加 background-size: contain 属性使图标能根据元素大小自动缩放 二、使用运程地址引入SVG图标 把SVG图标上传到网站服务器

    2024年02月05日
    浏览(54)
  • 记录微信小程序createIntersectionObserver()方法的使用

    最近做的微信小程序项目涉及到了曝光埋点需求,即页面上某一模块或者某一些模块被滑动显示在屏幕上的时候,需要做相关的埋点记录,想到了之前用过小程序提供的createIntersectionObserver()方法做过滚动渐变处理,所以记录下createIntersectionObserver()的使用方法。 createIntersect

    2024年02月08日
    浏览(99)
  • uCharts基本使用方法

    首先下载ucharts文件 https://gitee.com/uCharts/uCharts 下载下来看到有这些文件,小伙伴们可以先去示例项目里面看 引入u-charts.js文件,主要构建就是new uCharts和配置context,其他的就跟其他charts配置一样 可以看例子写的,也可以自己试验一波 方法写入两种方式 第一种方式 ucharts下载

    2024年02月04日
    浏览(44)
  • 微信小程序使用image组件显示图片的方法

    本文实例讲述了微信小程序使用image组件显示图片的方法。分享给大家供大家参考,具体如下: 1、效果展示 2、关键代码 ① index.wxml 代码如下: image style=\\\"width: 300px; height: 300px; margin:10px;\\\" mode=\\\"scaleToFill\\\" src=\\\"{{imageSrc}}\\\"/image ② index.js Page({ data:{ // text:\\\"这是一个页面\\\" imageSrc:\\\'../..

    2024年02月12日
    浏览(93)
  • 微信小程序不能使用wx.getlocation的解决方法

    1、没在小程序开发平台申请开通wx.getlocation API; 2、没有在app.json文件中声明配置; 3、开发版本库较高,调到2.25.3试试; 4、打开微信小程序页面右上角三个点,打开小程序设置,查看是否允许使用位置信息。

    2024年02月11日
    浏览(57)
  • 【微信小程序】使用自定义字体的三种方法

    小程序官方提供的接口,最便捷的加载字体的方法,不过限制颇多。必须https且同源,canvas等原生组件不支持。注意!!使用本地文件无效,必须使用网络地址。 官方文档:wx.loadFontFace(Object object) | 微信开放文档 演示代码: 传统的css规则,跟loadFontFace限制一样,必须https且同

    2024年02月08日
    浏览(51)
  • 使用Appium 测试微信小程序和微信公众号方法

    由于腾讯系QQ、微信等都是基于腾讯自研X5内核,不是google原生webview,需要打开TBS内核Inspector调试功能才能用Chrome浏览器查看页面元素,并实现Appium自动化测试微信小程序和微信公众号。 前提条件Appium环境搭建,这里不多说了,可查阅Appium环境搭建文章。 因夜神等模拟器是

    2024年02月13日
    浏览(38)
  • 网站使用微信小程序扫码登录的实现方法

    传统网站一般都会使用账号密码登录,但这种方式总有用户会忘记密码,找回密码需要一系列验证,也挺麻烦的,于是学习了一下扫码登录,这种方式不仅不会有忘记密码的烦恼,登录还十分快捷。用户体验较好. 网站端点击小程序图片,弹出小程序码 小程序端授权页面 1、

    2024年02月16日
    浏览(52)
  • 【微信小程序】使用 wx.request 方法进行异步网络请求

    在微信小程序中,你可以使用 wx.request 方法进行异步网络请求,并将获取到的列表数据渲染到 UI 上。 首先,在页面的 data 中定义一个数组变量,用于存储获取到的列表数据,例如: 然后,在页面的生命周期函数 onLoad 或需要触发网络请求的函数中,使用 wx.request 方法发送异

    2024年02月16日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包