解决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 相关文章推荐
围观tangram js库
Dec 28 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
Oct 21 Javascript
js中如何把字符串转化为对象、数组示例代码
Jul 17 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
Jun 17 Javascript
jQuery中trigger()与bind()用法分析
Dec 18 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
Jan 13 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
Jan 26 Javascript
JavaScript手机振动API
Jun 11 Javascript
json定义及jquery操作json的方法
Sep 29 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
Feb 24 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
Nov 26 jQuery
js实现聊天对话框
Feb 08 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
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
php中文验证码实现示例分享
2014/01/12 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python 元组(Tuple)操作详解
2014/03/11 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
Python3实现二叉树的最大深度
2019/09/30 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
python实现坦克大战
2020/04/24 Python
农药学硕士毕业生自荐信
2013/09/25 职场文书
材料加工硕士生求职信
2013/10/10 职场文书
开办化妆品公司创业计划书
2013/12/26 职场文书
中英文求职信范文
2014/01/27 职场文书
爱心倡议书范文
2014/05/12 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
首都博物馆观后感
2015/06/05 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL