解决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保存网页为图片借助于html2canvas库实现
Sep 05 Javascript
JS实现的生成随机数的4个函数分享
Feb 11 Javascript
javascript实现倒计时并弹窗提示特效
Jun 05 Javascript
node.js调用C++开发的模块实例
Jul 03 Javascript
Jquery中巧用Ajax的beforeSend方法
Jan 20 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
判断颜色是否合法的正则表达式(详解)
May 03 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
Sep 11 Javascript
解决Vue不能检测数组或对象变动的问题
Feb 24 Javascript
AngularJS上传文件的示例代码
Nov 10 Javascript
ligerUI的ligerDialog关闭刷新的方法
Sep 27 Javascript
Html5生成验证码的示例代码
May 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
javascript 继承实现方法
2009/08/26 Javascript
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
Python面向对象编程基础解析(二)
2017/10/26 Python
Python字符串、整数、和浮点型数相互转换实例
2018/08/04 Python
Django 用户认证组件使用详解
2019/07/23 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
英国袜子店:Sock Shop
2017/01/11 全球购物
德国机车企业:FC-Moto
2017/10/27 全球购物
我们的节日元宵活动方案
2014/08/23 职场文书
2014年施工员工作总结
2014/11/18 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
单独二胎证明
2015/06/24 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android