解决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 相关文章推荐
JavaScript window.document的属性、方法和事件小结
Oct 24 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
Dec 24 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
Mar 06 Javascript
js 单击式的下拉菜单效果实例
Aug 13 Javascript
jquery队列queue与原生模仿其实现方法分享
Mar 25 Javascript
setInterval计时器不准的问题解决方法
May 08 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
Jun 03 Javascript
jQuery+CSS实现简单切换菜单示例
Jul 27 Javascript
简单谈谈Javascript函数中的arguments
Feb 09 Javascript
js表单序列化判断空值的实例
Sep 22 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
Nov 28 Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
利用javascript数组长度循环数组内所有元素
2013/12/27 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
JS实现随机点名器
2020/04/12 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
python实现决策树分类
2018/08/30 Python
Python常见的pandas用法demo示例
2019/03/16 Python
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
类如何去实现接口
2013/12/19 面试题
岗位职责定义及内容
2013/11/08 职场文书
单位介绍信范文
2014/01/18 职场文书
团日活动策划书
2014/02/01 职场文书
化妆品促销方案
2014/02/24 职场文书
公司担保书格式范文
2014/05/12 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
森林防火宣传标语
2014/06/27 职场文书
学习心理学的体会
2014/11/07 职场文书
高中团支书竞选稿
2015/11/21 职场文书
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏