动态循环环形图,并且解决鼠标进入时,中间循环字体不覆盖
此处贴上vue代码,直接使用即可,数据根据实际情况更换
<template>
<div class="new-home_right-pie">
<div id="new-home-pie" @mouseenter="enterPie" @mouseleave="leavePie" ref="newHomePie"></div>
</div>
</template>
<script>
export default {
name: "pie",
data(){
return{
timmerOneAnim:null,
currentIndex:-1,
pieChart:null,
options:null,
timer:0,
xData: [ '联动中心', '联动中心1', '阳光信访', '阳光信访1', '矛盾纠纷'],
yData: [17481, 384990, 24291, 685233, 6223]
}
},
computed:{
formatYData(){
return this.xData.map((item,index)=>{
return {
name: item,
value: this.yData[index]
}
})
},
},
mounted() {
this.$nextTick(()=> {
this.initEcharts()
})
},
methods:{
initEcharts() {
this.pieChart = this.$echarts.init(this.$refs.newHomePie);
this.options = {
color: ['#a8d701','#fac438','#30d2e8','#00abab','#d520d8'],
legend: {
right: 40,
top: 38,
width: '30%',
itemWidth: 20,
itemHeight: 20,
textStyle:{
color: '#fff',
fontSize: 24
},
data: this.xData
},
series: [
{
name: '矛盾来源',
type: 'pie',
center: ['25%','center'],
radius: ['45%', '60%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: '18',
fontWeight: 'bold',
fontFamily:'FontTenxun'
}
},
labelLine: {
show: false
},
data: this.formatYData
}
]
}
this.pieChart.setOption(this.options);
this.timerEvent()
},
timerEvent() {
this.timer = 0
this.currentIndex = -1
//此处执行this.pieHighlight(),是为了鼠标移出时,立即执行一遍,而不是等4秒后,再执行
this.pieHighlight()
this.timmerOneAnim = setInterval(this.pieHighlight, 4000)
},
pieHighlight() {
let dataLen = this.options.series[0].data.length
this.timer++;
if (this.timer==5) {
for(let index in this.formatYData){
this.formatYData[index].value=(Math.random()*50+100).toFixed(0);
}
this.pieChart.setOption({
series: [{
data: this.formatYData
}]
})
this.timer=1;
}
// 取消之前高亮的图形
this.pieChart.dispatchAction({
type: 'downplay',
seriesIndex: 0,
dataIndex: this.currentIndex
})
this.currentIndex = (this.currentIndex + 1) % dataLen
// 高亮当前图形
this.pieChart.dispatchAction({
type: 'highlight',
seriesIndex: 0,
dataIndex: this.currentIndex
})
},
//鼠标进入
enterPie() {
//鼠标进入,关闭(清空)定时器并且取消环形图高亮(即取消显示中间字体,取消当前某扇环形凸显)
clearInterval(this.timmerOneAnim)
this.pieChart.dispatchAction({
type: 'downplay',
seriesIndex: 0,
dataIndex: this.currentIndex
})
},
//鼠标离开
leavePie() {
//开启定时器
this.timerEvent(this.options)
},
},
destroyed() {
this.timmerOneAnim && clearInterval(this.timmerOneAnim)
}
}
</script>
<style lang="scss" scoped>
.new-home_right-pie{
width: 100%;
height: 100%;
position: relative;
&_title{
position: absolute;
bottom: 20px;
right: 40px;
&-number{
color: #2fcce6;
font-size: 32px;
font-weight: normal;
}
}
}
#new-home-pie{
width: 100%;
height: 100%;
}
</style>
贴张实现效果图


浙公网安备 33010602011771号