echarts 折线图带动画
<template> <div :class="className" :style="{height:height,width:width}"/> </template> <script> import echarts from 'echarts' export default { props: { className: { type: String, default: 'chart' }, width: { type: String, default: '100' }, height: { type: String, default: '100' }, datalist: { type: Object, default: () => { return {} } }, animation: { type: Boolean, default: false }, showTool: { type: Boolean, default: false } }, data() { return { chart: null, subject: [], value: [], colors: ['#558BFF', '#A1D4FF'], remWidth: '', remHeight: '', scale: 1, fontSize: 14, lineWidth: 6, pieData: [] } }, watch: { datalist: { handler: function(newData, oldData) { this.initChart() }, deep: true } }, created() { }, mounted() { const html = document.getElementsByTagName('html')[0] const width = html.clientWidth this.fontSize = this.fontSize / 1920 * width this.lineWidth = this.lineWidth / 1920 * width this.initChart() this._animation() }, methods: { _animation() { if (this.animation) { const arr = this.datalist.data[1] let selectIndex = 0 setInterval(() => { this.chart.dispatchAction({ type: 'showTip', // 默认显示提示框 seriesIndex: 0, // 这行不能省 dataIndex: selectIndex }) this.chart.dispatchAction({ type: 'downplay', // 数据的 index,如果不指定也可以通过 name 属性根据名称指定数据 seriesIndex: 0, // 这行不能省 dataIndex: selectIndex === 0 ? arr.length - 1 : selectIndex - 1 }) this.chart.dispatchAction({ type: 'highlight', seriesIndex: 0, dataIndex: selectIndex }) selectIndex = selectIndex + 1 if (selectIndex >= arr.length) { selectIndex = 0 } }, 5000) } }, initChart() { this.chart = echarts.init(this.$el, 'macarons') window.addEventListener('resize', () => { this.chart.resize() }) const data = this.datalist.data this.pieData = this.datalist.data this.chart.setOption({ tooltip: { trigger: 'axis', formatter: `{b0}<br />{a}: {c0}${this.datalist.until}`, extraCssText: 'box-shadow: 0 0 15px rgba(33,116,146,1) inset' }, toolbox: { show: this.showTool, feature: { magicType: { type: ['line', 'bar'] }, myTool1: { show: true, title: '导出excel', icon: 'path://M676.571 896H54.857V164.571h914.286V896H676.57zM640 859.429V713.143H384v146.286h256zM384 493.714h256V347.43H384v146.285z m0 36.572V676.57h256V530.286H384zM91.429 859.429h256V713.143h-256v146.286z m256-182.858V530.286h-256V676.57h256z m0-182.857V347.43h-256v146.285h256zM932.57 347.43h-256v146.285h256V347.43z m0 182.857h-256V676.57h256V530.286z m-256 182.857v146.286h256V713.143h-256z', onclick: () => { alert('暂无下载链接') } } } }, grid: { top: '15%', left: '3%', right: '2%', bottom: '0%', containLabel: true }, xAxis: [{ type: 'category', boundaryGap: false, axisLine: { // 坐标轴轴线相关设置。数学上的x轴 show: true, lineStyle: { color: '#233e64' } }, axisLabel: { // 坐标轴刻度标签的相关设置 textStyle: { color: 'rgba(255,255,255,1)', fontSize: this.fontSize, fontFamily: 'SourceHanSansCN-Light' } // interval: 0 }, axisTick: { show: false }, data: data[1] }], yAxis: [{ type: 'value', name: this.datalist.yAxisName, nameTextStyle: { color: '#fff' }, splitLine: { show: false, lineStyle: { color: '#233e64' } }, splitArea: { show: false// 去除网格区域 }, axisLine: { show: true }, axisLabel: { margin: 5, textStyle: { color: 'rgba(255,255,255,1)', fontSize: this.fontSize, fontFamily: 'SourceHanSansCN-Light' } }, axisTick: { show: false } }], series: [{ name: this.datalist.type, type: 'line', smooth: true, // 是否平滑曲线显示 symbolSize: 0, lineStyle: { normal: { color: 'rgba(26,214,226,1)', // 线条颜色 width: this.lineWidth } }, data: data[0] }], backgroundColor: 'rgba(0,0,0,0)' }) } } } </script> <style rel="stylesheet/scss" scoped lang="scss"> .chart { margin: 1rem 0.4rem 0 0.4rem; } </style>