(希望能帮助大家实现ecarts的动画效果)
1.效果图:
2.图表建立
this.option = {
grid: {
left: "0%",
right: "3%",
bottom: "0%",
top: "5%",
containLabel: true
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow"
},
padding: 10,
backgroundColor: "rgba(0, 0, 0, .8)"
},
dataZoom: [
{
// yAxisIndex: 0,
show: false,
type: "slider", // 这个 dataZoom 组件是 slider 型 dataZoom 组件
startValue: 0, // 从头开始。
endValue: this.end // 一次性展示五个。
}
],
xAxis: {
axisLabel: {
// rotate:45,
textStyle: {
color: "#fff",
fontSize: 12
},
formatter: function(value, index) {
return value.replace(/(.{4})/g, "$1\n");
}//控制x轴名称过长,实现4字折行
},
axisTick: {
show: false
},
axisLine: {
show: false
},
data: this.dataList.xAxis
},
yAxis: {
type: "value",
axisLine: {
show: false
},
axisTick: {
show: false
},
splitLine: {
show: false,
lineStyle: {
color: "#fff"
}
},
axisLabel: {
textStyle: {
color: "#fff",
fonSize: 12
}
}
},
series: [
{
type: "bar",
name: "人口",
barWidth: 30,
itemStyle: {
normal: {
color: "#1890FF"
}
},
label: {
//图形上的文本标签
normal: {
show: true,
position: "top",
textStyle: {
color: "#fff",
fontStyle: "normal",
fontFamily: "微软雅黑",
fontSize: 13
}
}
},
data: this.dataList.seriesData
}
]
}
3.基本思路分析:echarts 实现自动滚动效果,实现思路是利用echarts中option中的dataZoom属性,用定时器控制dataZoom中endValue和startValue变化,每次dataZoom变化都需要setOption重新渲染图表。
dataZoom: [
{
// yAxisIndex: 0,//实现y轴滚动
show: false,
type: "slider", // 这个 dataZoom 组件是 slider 型 dataZoom 组件
startValue: 0, // 从头开始。
endValue: this.end //
}
],
鼠标移入是停止定时器,离开继续定时器。
(注:移入是选中图标中的项,而不是图表区域)
4.定时器控制dataZoom代码:
this.chart.setOption(this.option)
this.chart.on('mouseover',this.stop)
this.chart.on('mouseout',this.goMove)
this.autoMove()
},
//自动滚动
autoMove(){
//this.dataList.seriesData为柱形图数据
this.timeOut=setInterval(()=>{
// clearInterval(this.timeOut)
// 每次向后滚动一个,最后一个从头开始。
// if(this.stopMove){ return }
if (Number(this.option.dataZoom[0].endValue) === this.dataList.seriesData.length-1) {
this.option.dataZoom[0].endValue = this.end;
this.option.dataZoom[0].startValue = 0;
} else {
this.option.dataZoom[0].endValue = this.option.dataZoom[0].endValue + 1;
this.option.dataZoom[0].startValue = this.option.dataZoom[0].startValue + 1;
}
this.chart.setOption(this.option)
}, 3000);
},
//停止滚动
stop(){
console.log(11)
// this.stopMove=true
clearInterval(this.timeOut)
},
//继续滚动
goMove(){
console.log(333333)
// this.stopMove=false
this.autoMove()
}