解决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 相关文章推荐
jquery利用event.which方法获取键盘输入值的代码
Oct 09 Javascript
javascript之querySelector和querySelectorAll使用介绍
Dec 20 Javascript
用正则表达式替换图片地址img标签
Nov 22 Javascript
js showModalDialog弹出窗口实例详解
Jan 07 Javascript
全面了解函数声明与函数表达式、变量提升
Aug 09 Javascript
打造自己的jQuery插件入门教程
Sep 23 Javascript
Javascript生成带参数的二维码示例
Oct 10 Javascript
JavaScript仿微信打飞机游戏
Jul 05 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
Jul 09 Javascript
Vue 进阶之路(三)
Apr 18 Javascript
javascript如何实现create方法
Nov 04 Javascript
微信小程序实现购物车小功能
Dec 30 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 ios推送(代码)
2013/07/01 PHP
php实现获取及设置用户访问页面语言类
2014/09/24 PHP
php绘制一条直线的方法
2015/01/24 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
JavaScript 中的事件教程
2007/04/05 Javascript
关于this和self的使用说明
2010/08/01 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
brook javascript框架介绍
2011/10/10 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
js实现点赞效果
2020/03/16 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
解析Python编程中的包结构
2015/10/25 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
Python中文编码知识点
2019/02/18 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
机械工程师的岗位职责
2013/11/17 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
八年级作文之友情
2019/11/25 职场文书
python基础之匿名函数详解
2021/04/21 Python
基于Go Int转string几种方式性能测试
2021/04/28 Golang
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang