解决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 相关文章推荐
JS代码放在head和body中的区别分析
Dec 01 Javascript
javascript 获取HTML DOM父、子、临近节点
Jun 16 Javascript
js QQ客服悬浮效果实现代码
Dec 12 Javascript
js脚本分页代码分享(7种样式)
Aug 19 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
Jan 08 Javascript
JavaScript实现点击按钮字体放大、缩小
Feb 29 Javascript
Javascript HTML5 Canvas实现的一个画板
Apr 12 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
Dec 16 Javascript
js实现滑动到页面底部自动加载更多功能
Feb 15 Javascript
JS操作input标签属性checkbox全选的实现代码
Mar 02 Javascript
关于Webpack dev server热加载失败的解决方法
Feb 22 Javascript
JS实现可视化文件上传
Sep 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
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
PHP header函数分析详解
2011/08/06 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
如何理解python面向对象编程
2020/06/01 Python
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
静心口服夜广告词
2014/03/20 职场文书
信访工作经验交流材料
2014/05/23 职场文书
创建文明城市标语
2014/06/16 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
九寨沟导游词
2015/02/02 职场文书
滴水洞导游词
2015/02/10 职场文书
学困生转化工作总结
2015/08/13 职场文书
MySQL如何解决幻读问题
2021/08/07 MySQL