解决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 相关文章推荐
点击button获取text内容并改变样式的js实现
Sep 09 Javascript
js实现网页标题栏闪烁提示效果实例分析
Nov 20 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
Apr 12 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
Nov 17 Javascript
深入浅析react native es6语法
Dec 09 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
Feb 16 Javascript
jQuery简单验证上传文件大小及类型的方法
Jun 02 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
Jan 04 Javascript
原生js封装自定义滚动条
Mar 24 Javascript
JS实现unicode和UTF-8之间的互相转换互转
Jul 05 Javascript
vue中Axios的封装与API接口的管理详解
Aug 09 Javascript
Vue使用预渲染代替SSR的方法
Jul 02 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
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
可输入的下拉框
2006/06/19 Javascript
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
Python实现统计代码行的方法分析
2017/07/12 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
python中的itertools的使用详解
2020/01/13 Python
python实现图像拼接
2020/03/05 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
Pycharm安装python库的方法
2020/11/24 Python
GMP办公室主任岗位职责
2014/03/14 职场文书
文明工地标语
2014/06/16 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang
详解Python中的进程和线程
2021/06/23 Python
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python