-
需求:x轴为时间国际值,所以需要转化成'YYYY-MM-DD HH:mm:ss'格式,又因为时间不连续,没值的时间在数组里直接返回null导致x轴其实间断的,也不需要ehcart自动补齐间断的值让他们联系在一起,所以x轴type为category。导致dataZoom的labelFormatter返回的value是百分数(当前时间值占x轴的百分比),但是由于需求特殊我们的返回的不是正规的百分比,最大值才16!,导致浪费了不少时间研究,最后相处来了,既然最大值是16那就以16为100量程,value/16*(x.length-1)就解决了,如果还是除以100 datazoom的悬浮提示的时间范围不正确
-
代码环境:vue3 ts echart5 moment.js时间转插件
-
代码
js// 后端返回的数据格式,由于不是前段需要的'YYYY-MM-DD HH:mm:ss'格式所以需要对x轴的axisLabel使用数据转化 const data = [ [ "2025-01-24T16:00:00+08:00", 0 ], null, [ "2025-02-05T10:00:00+08:00", 1 ], [ "2025-02-05T11:00:00+08:00", 11 ], [ "2025-02-05T12:00:00+08:00", 1 ], [ "2025-02-05T13:00:00+08:00", 11 ], [ "2025-02-05T14:00:00+08:00", 10 ], [ "2025-02-05T15:00:00+08:00", 1 ], null, [ "2025-02-07T09:00:00+08:00", 1 ], [ "2025-02-07T10:00:00+08:00", 11 ], ] // const getData= ()=>{ // 后端返回res echartData.value = res.data[0].data?.map(item=>item?moment(item[0]).format('YYYY-MM-DD HH:mm:ss'):null) // 生成x轴时间数组 res.data?.forEach((item,index)=>{ series.push({ type: 'line', data: item.data, }) }) Option.series= series }) const echartData = ref(null) // 设置图标配置项 const fanweiSize = ref(null) option = { // color: colors, // tooltip: { // trigger: 'axis', // axisPointer: { // type: 'cross' // } // }, // toolbox: { // feature: { // dataView: { show: true, readOnly: false }, // restore: { show: true }, // saveAsImage: { show: true } // } // }, // dataZoom: { // type: 'inside', //放大缩小x轴数值 // }, // dataZoom:[{ // type: 'inside', // 放大和缩小 // orient: 'vertical', // }, // { // type: 'inside', // }], dataZoom: [ { show: true, type: 'slider', // 滑动条型 dataZoom labelFormatter: (value) => { // 核心代码 if(!echartData.value) return const dataLength = echartData.value.length; fanweiSize.value&&fanweiSize.value!==0?null:fanweiSize.value=value // 记录首次进入页面获取的时间范围最大值 const index = Math.floor((value / fanweiSize.value) * (dataLength - 1)); // 正常是除以100的但是这里不知道哪里问题最大值只有16所以除以16就行了 // console.log((value / 16),dataLength,(value / 16) * (dataLength - 1)) const rawDate = echartData.value[index]; // console.log(value,"moment(rawDate).format('YYYY-MM-DD HH:mm:ss')",moment(rawDate).format('YYYY-MM-DD HH:mm:ss')) // 格式化时间(假设原始时间字符串已经是合法格式) return moment(rawDate).format('YYYY-MM-DD HH:mm:ss'); }, }, { type: 'inside', }, ], xAxis: { type: 'category', //time axisLabel: { formatter: function (value) { return moment(value).format('YYYY-MM-DD HH:mm:ss'); } }, axisPointer: { type: 'line', label:{ formatter: function (obj) { return moment(obj.value).format('YYYY-MM-DD HH:mm:ss'); }, } }, }, yAxis: [{ type: 'value', name: "数量", nameLocation:'end', nameGap:15, nameTextStyle:{ align:'right', }, },], series: [] };
使用echart的dataZoom的labelFormatter自定义时间范围
禾苗种树2025-02-22 10:49
相关推荐
yanglamei196212 分钟前
基于Python+Django+Vue的旅游景区推荐系统系统设计与实现源代码+数据库+使用说明[廾匸]24 分钟前
cesium视频投影流烟默1 小时前
vue和微信小程序处理markdown格式数据梨落秋溪、1 小时前
输入框元素覆盖冲突菲力蒲LY1 小时前
vue 手写分页一丢丢@zml1 小时前
new 一个构造函数的过程以及手写 new天下皆白_唯我独黑2 小时前
npm 安装扩展遇到证书失效解决方案~欸嘿2 小时前
Could not download npm for node v14.21.3(nvm无法下载节点v14.21.3的npm)化作繁星2 小时前
React 高阶组件的优缺点zpjing~.~2 小时前
vue 父组件和子组件中v-model和props的使用和区别