timeLine 的使用

本文介绍了如何在ECharts的时间轴组件中,确保动画按时间顺序播放而非原始数据顺序。通过实例演示了如何对时间数据进行排序,并给出了配置选项和关键步骤,帮助开发者解决在Timeline上时间轴动画播放问题。
摘要由CSDN通过智能技术生成

timeLine 的 type 可以是 value,time,category 当我们使用 time 时,data 里面的时刻数据会按照时间先后顺序自动从小到大排序到时间轴上,比如,你的数据是:

[
'2021-08-13 08:00:00',
'2021-08-13 09:00:00',
'2021-08-13 10:00:00',
'2021-08-13 11:00:00',
'2021-08-13 12:00:00',
'2021-08-13 06:00:00'
]

那么时间轴上会将最后一个数据 06:00:00 排在最前面。

这样做只是显示时间轴是没有问题的,但是如果你点击播放按钮时,他并不会按照时间先后顺序播放动画,而是按照你的 data 数据里面的顺序播放动画,所以需要你对时间数据进行排序之后再放到 data 中

配置项:

option = {
  baseOption: {
    timeline: {
      top: 200,
      left: 100,
      right: 100,
      axisType: 'time',
      // realtime: false,
      // loop: false,
      autoPlay: true,
      // currentIndex: 2,
      playInterval: 1000,
      // controlStyle: {
      //     position: 'left'
      // },
      data: [
        '2021-08-17 00:00', '2021-08-17 02:00',
        '2021-08-17 04:00', '2021-08-17 06:00',
        '2021-08-17 08:00', '2021-08-17 10:00',
        '2021-08-17 12:00', '2021-08-17 14:00',
      ],
      label: {
        position: 'bottom',
        textStyle: {
          color: '#dfdfdf'
        },
        formatter : function(time) {
          time = new Date(time)
          let str = String(time.getMonth() + 1).padStart(2, '0') + '-'
          + String(time.getDate()).padStart(2, '0') + ' '
          + String(time.getHours()).padStart(2, '0') + ':00'
          return str
        }
      },
      symbol: 'diamond',
      symbolSize: 14,
      itemStyle: {
        color: '#c00'
      },
      checkpointStyle: {
        color: '#c00',
        symbol: 'diamond',
        symbolSize: 16
      },
      lineStyle: {
        color: '#ccc',
        width: 2,
        type: 'dashed'
      }
    },
    tooltip: {},
    calculable : true,
  },
};
// 计算时间轴的数据,传入初始时间,和时刻表
computedTimeLine (startDate, dataTime) {
  startDate = new Date(startDate).getTime()
  let timeLineArr = []
  // 生成未来 24 小时的时间轴数据
  for (let i = 0; i < 24; i++) {
    let time = new Date(startDate + 3600*1000*i)
    let timeItem = time.getFullYear() + '-' 
      + String(time.getMonth() + 1).padStart(2, '0')
      + '-' + String(time.getDate()).padStart(2, '0') + ' '
      + String(time.getHourse()).padStart(2, '0') + ':00'
    timeLineArr.push(timeItem)
  }
  // 详细时刻表也放到二十四小时当中
  dataTime = dataTime.map(item => {
    return {
      value: item,
      symbol: 'arrow',
      symbolSize: 14,
      itemStyle: {
        normal: {
          color: '#c00'
        }
      }
    }
  })
  timeLineArr.push(...dataTime)
  return timeLineArr
}

// 给时间排序
sortTime (timeLineArr) {
  timeLineArr.sort((a, b) => {
    if (a.value && b.value) {
      return a.value.localeCompare(b.value)
    } else if (a.value && !b.value) {
      return a.value.localeCompare(b)
    } else if (!a.value && b.value) {
      return a.localeCompare(b.value)
    } else {
      return a.localeCompare(b)
    }
  })
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值