解决Vue + Echarts 使用markLine标线(precision精度问题)


Posted in Javascript onJuly 20, 2020

在VUE实例中使用Echarts

安装echarts依赖:

npm install echarts -s

编写代码:

引入echarts对象:

鉴于准备工作中已经通过npm安装了echarts依赖,所以可以直接在vue文件中使用代码import echarts from “echarts”引入echarts对象:

<script>
 import echarts from 'echarts/lib/echarts'
</script>

注意:只引入了echarts还不能直接使用markLine(作为前端菜鸟爬坑了好久?)

引入markLine对象:

<script>
 import echarts from 'echarts/lib/echarts'
 import 'echarts/lib/component/markLine'
</script>

以下是我画图的所有echarts依赖:

import echarts from 'echarts/lib/echarts'
 import 'echarts/lib/chart/candlestick'
 import 'echarts/lib/chart/bar'
 import 'echarts/lib/component/legend'
 import 'echarts/lib/component/title'
 import 'echarts/lib/component/markLine'

markLine终于有用了?

我的代码:

这是我的markLine配置

let price = [13.9, 14.95, 16];

markLine: {
 symbol: 'none',
 silent: true,
 data: [
 {yAxis: price[0]},
 {yAxis: price[1]},
 {yAxis: price[2]}
 ],
 lineStyle: {
 show: true,
 color: '#808C94',
 type: 'dashed'
 }
}

markLine效果:

解决Vue + Echarts 使用markLine标线(precision精度问题)

然而 Echarts 的 series[i]-bar.markLine.precision 配置项不太厚道

Echarts文档中的描述:

series[i]-bar.markLine.precision number

[ default: 2 ]

标线数值的精度,在显示平均值线的时候有用。

根据上图展示,并没有我想要的精度。

——注:13.9应该显示13.90,16应该显示16.00

precision配置默认为2

怎么办?填坑!

仔细翻看Echarts文档发现了一个配置:

series[i]-bar.markLine.label.formatter

里面有个回调函数,而且与axisLabel.formatter不太一样

修改配置一:

请确保你的Number.toFixed(2)是满足要求的

markLine: {
 symbol: 'none',
 silent: true,
 data: [
  {yAxis: price[0]},
  {yAxis: price[1]},
  {yAxis: price[2]}
 ],
 lineStyle: {
  show: true,
  color: '#808C94',
  type: 'dashed'
 },
 // 先让markLine精确到3,默认为2
 precision: 3,
 label: {
  formatter: function(value) {
   // 确保你的Number.toFixed(2)是满足要求的
  return value.value.toFixed(2);
  }
 }
}

修改配置二:

markLine: {
 symbol: 'none',
 silent: true,
 data: [
  {yAxis: price[0]},
  {yAxis: price[1]},
  {yAxis: price[2]}
 ],
 lineStyle: {
  show: true,
  color: '#808C94',
  type: 'dashed'
 },
 // 先让markLine精确到3,默认为2
 precision: 3,
 label: {
  // 没有写通用代码了,针对性解决一下当前问题
  formatter: function(value) {
   // 这里的value 是一个label对象,使用value.value获取到真正的值
   let strVal = value.value.toString();
   let splitStr = strVal.split('.');
   let tailStr = splitStr[1];
   if (tailStr == null) {
    return value.value.toString() + '.00';
   }
  // 0.995 ~ 0.999 = 1
  if (tailStr >= 995) {
  return (parseInt(splitStr[0]) + 1).toString() + '.00';
  }
   if (tailStr.length >= 3) {
    let lastStr = tailStr.substr(2, 1);
    // 解决toFixed(2)方法四舍五入无效
    if (lastStr >= 5) {
     // 数值+101有些取巧,但能解决问题...
     tailStr = (parseInt(tailStr.substr(0, 2)) + 101).toString().substr(1, 2);
     return splitStr[0] + '.' + tailStr;
    } else {
     return splitStr[0] + '.' + tailStr.substr(0, 2);
    }
   } else if (tailStr.length === 1) {
    return value.value.toString() + '0';
   } else {
    return value.value.toString();
   }
  }
 }
}

鬼知道Number.toFixed(2)为什么保留两位小数时并没有四舍五入,就写了段恶心的代码,个人能力有限?

修改后效果:

解决Vue + Echarts 使用markLine标线(precision精度问题)

以上这篇解决Vue + Echarts 使用markLine标线(precision精度问题)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Google Maps API地图应用示例分享
Oct 23 Javascript
node.js中的path.delimiter方法使用说明
Dec 09 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
May 12 Javascript
javascript精确统计网站访问量实例代码
Dec 19 Javascript
Node.js开发者必须了解的4个JS要点
Feb 21 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
Apr 19 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
Apr 28 Javascript
Angular6 写一个简单的Select组件示例
Aug 20 Javascript
微信小程序实现下拉刷新动画
Jun 21 Javascript
vue3.0中使用postcss-pxtorem的具体方法
Nov 20 Javascript
原生js无缝轮播插件使用详解
Mar 09 Javascript
JavaScript canvas实现文字时钟
Jan 10 Javascript
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 #jQuery
解决echarts echarts数据动态更新和dataZoom被重置问题
Jul 20 #Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
Jul 20 #Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
Jul 20 #Javascript
基于Echarts图表在div动态切换时不显示的解决方式
Jul 20 #Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 #Javascript
vue-router之解决addRoutes使用遇到的坑
Jul 19 #Javascript
You might like
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
js命名空间写法示例
2015/12/18 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
Python中特殊函数集锦
2015/07/27 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
python 遍历pd.Series的index和value
2019/11/26 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
创业计划书怎样才能打动风投
2014/01/01 职场文书
小学英语教学反思
2014/01/30 职场文书
初中作文评语大全
2014/04/23 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript