基于mpvue小程序使用echarts画折线图的方法示例


Posted in Javascript onApril 24, 2019

第一次使用mpvue框架来写小程序,项目开发直接搬用mpvue-shop(一个仿网易严选的小程序开发项目),项目结构清楚,实现了大部分功能,对于初次使用mpvue的小伙伴们来说,是一个很好的选择。

关于组件的选择:

1.echarts-for-weixin,官方echarts的小程序版本。使用参考:echarts-for-weixin介绍,如果你是原生开发小程序版本,这个组件非常适合你,开发过程中可使用echarts官方提供的所有配置和Api,但并不适合mpvue项目。

2、wx-charts,一个个人开发的微信小程序图表插件,体积只有30K,可用于mpvue项目和原生小程序项目,支持大部分图表绘制,缺点是可配置化不强,对于UI没有太大要求的可使用此组件,比较适合于个人项目开发。

3、mpvue-echarts与echarts结合。特别适合mpvue项目,mpvue-echarts是一个基于mpvue开发的echarts组件,echarts的加入可完全使用官方所有的图表绘制功能,让echarts在小程序当中得到全部应用。

mpvue-echarts配合echarts的使用

下载相关包

npm install mpvue-echarts --save

echarts的下载可到官网上下载,由于小程序中对文件大小有限制,建议通过勾选所需要的功能按需下载。

vue文件中使用

template:

<mpvue-echarts :echarts="echarts" :onInit="initChart" canvasId="demo-canvas" />

js:

import mpvueEcharts from 'mpvue-echarts';

let echarts = require("../../../static/lib/echarts.min.js"); //按需下载的压缩文件放在项目文件夹中
import charts from './charts'; //本地mixin文件,图表的所有配置

let chart = null;
export default {
 data() {
 return {
  echarts,
 };
 },
 async mounted() {
 let data = await post("/product/marketInfo",{
 });

 this.initCombineLineData(data.trendData);
 chart.setOption(this.trendChart);

 },
 mixins: [charts],
 methods: {
 initChart(canvas, width, height) {
  chart = echarts.init(canvas, null, {
   width: width,
   height: height
  });
  canvas.setChart(chart);
  chart.setOption(this.trendChart);
  return chart;

 }
 },
 components: {
 mpvueEcharts
 }
}

charts.js文件

export default {
 data() {
 return {
  //trend图
  trendChart: {
  grid: {
   left: 'left',
   top: 50,
   containLabel: true,
   tooltip: {
    triggerOn: 'none',
    showConent: true,
    position: function (pt) {
    return [pt[0], pt[1]-50];
    }
   }
  },
  tooltip: {
   trigger: "none",
   showContent: false,
  },
  textStyle: {
   color: "#999",
   fontSize: 24
  },
  label: {
   fontSize: 22
  },
  xAxis: {
   name: "年份",
   type: "category",
   nameGap:10, //坐标轴名称与轴线之间的距离。
   boundaryGap: true, //坐标轴两边留白策略
   nameTextStyle:{ //坐标轴名称样式
    color:"#999",
    fontSize: 12,
    align: 'left',
    verticalAlign: 'bottom'
   },
   axisLine: { //坐标轴轴线相关设置
   show: true, //是否显示坐标轴轴线。
   symbol: ['none','arrow'], //轴线两边的箭头默认不显示箭头,即 'none'。两端都显示箭头可以设置为 'arrow',只在末端显示箭头可以设置为 ['none', 'arrow']。
   symbolSize: [10,8],//轴线两边的箭头的大小
   symbolOffset: [0,5],//轴线两边的箭头的偏移
   lineStyle: {
    color: "#ece9e2",//线条颜色
   },
   },
   axisTick: { //坐标轴刻度相关设置
   show: false
   },
   axisLabel: { //坐标轴刻度标签的相关设置
   interval: 10000,
   showMinLabel: true,
   showMaxLabel: true,
   fontSize: 12,
   padding: [6, 0, 0, 0]
   },
   axisPointer: { //坐标轴指示器配置项
    value: '',
    snap: true,
    type: 'line', //指示器类型
    show: false, //竖线是否显示,作用于每一个点
    lineStyle: {
     color: '#ece9e2',
     width: 1
    },
    label: { //坐标轴指示器的文本标签
     show: false,
    },
    handle: { //拖拽手柄,适用于触屏的环境
     show: true,
     color: 'none'
    }
   },
   data: []
  },
  yAxis: {
   type: "value",
   name: "价格(元)",
   nameGap: 0,
   nameTextStyle:{
    color:"#999",
    fontSize: 12,
    align: 'right',
    verticalAlign: 'top',
    padding: [0,0,10,60]
   },
   axisLine: {
   show: true,
   length: 100,
   symbol: ['none','arrow'],
   symbolSize: [10,8],
   symbolOffset: [0,5],
   lineStyle: {
    color: "#ece9e2",
   },

   },
   axisLabel: {
   fontSize: 12,
   formatter: value => {
    return value;
   }
   },
   axisTick: {
   show: false
   },
   splitLine:{
    lineStyle: {
     //网络线设置(只作用于非类目铀)
     show: true,
     color: "#ece9e2",
     width: 0.5,
     type: "solid"
    },
   },
   splitNumber: 5,
   min: 0,
   max: 4000,
   interval: 1000
  },
  series: [
   {
   type: "line",
   smooth: false,
   color: "#ca3c2e",
   showSymbol: true,
   lineStyle: {
    width: 1.5,
    color: "#c5936e",
   },
   itemStyle: {
    normal:{
     borderWidth: 0.5,
     label:{
      show: true, //显示值
      borderWidth: 2,
      color: '#c5936e',
      fontSize: 12,
     }
    }
   },
   data: []
   },
  ]
  },
 };
 },
 methods: {
  initCombineLineData(data) {
   this.trendChart.xAxis.axisPointer.value = data[data.length-1].date; //让指示器定位在最后一个折线点上
   for(let i=0;i<=data.length;i++){
    let yData = {
     symbol: 'none' //折线上不显示转折点
    };
    if(i== data.length-1){
     yData.symbol = "emptyCircle", //最后一个显示转折点
     yData.symbolSize = 6
    }
    yData.value = data[i].price;

    this.trendChart.xAxis.data.push(data[i].date);
    this.trendChart.series[0].data.push(yData);

   }
  },
 }
};

最终效果

基于mpvue小程序使用echarts画折线图的方法示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
location.href语句与火狐不兼容的问题
Jul 04 Javascript
javascript window.confirm确认 取消对话框实现代码小结
Oct 21 Javascript
javascript继承之为什么要继承
Nov 10 Javascript
javascript相关事件的几个概念
May 21 Javascript
jquery获取复选框checkbox的值的简单实现方法
May 26 Javascript
vue与TypeScript集成配置最简教程(推荐)
Oct 17 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
Feb 18 jQuery
JS实现点击按钮可实现编辑功能
Jul 03 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
Apr 08 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 Javascript
世界上最短的数字判断js代码
Sep 09 Javascript
小程序简单两栏瀑布流效果的实现
Dec 18 Javascript
详解微信小程序开发用户授权登陆
Apr 24 #Javascript
微信小程序实现的一键拨号功能示例
Apr 24 #Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
Apr 24 #Javascript
微信小程序实现的图片保存功能示例
Apr 24 #Javascript
vue中的inject学习教程
Apr 24 #Javascript
浅谈Webpack多页应用HMR卡住问题
Apr 24 #Javascript
微信小程序实现跳转的几种方式总结(推荐)
Apr 24 #Javascript
You might like
PHP和XSS跨站攻击的防范
2007/04/17 PHP
关于svn冲突的解决方法
2013/06/21 PHP
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
2016/10/29 PHP
asp批量修改记录的代码
2008/06/25 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
2015/04/10 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
浅析Vue实例以及生命周期
2018/08/14 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
用python找出那些被“标记”的照片
2017/04/20 Python
python实现决策树分类算法
2017/12/21 Python
python编程使用协程并发的优缺点
2018/09/20 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
Python如何在bool函数中取值
2020/09/21 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
高中生自我评价个人范文
2013/11/09 职场文书
信息管理员岗位职责
2013/12/01 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
会计岗位职责
2015/02/03 职场文书
小学教师个人总结
2015/02/05 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL
vue实力踩坑之push当前页无效
2022/04/10 Vue.js