Maison >interface Web >js tutoriel >Méthode d'implémentation consistant à cliquer pour faire pivoter et mettre en surbrillance le graphique en anneau echarts (code)

Méthode d'implémentation consistant à cliquer pour faire pivoter et mettre en surbrillance le graphique en anneau echarts (code)

不言
不言original
2018-09-14 17:30:322902parcourir

Le contenu de cet article concerne la méthode d'implémentation (code) consistant à cliquer pour faire pivoter et mettre en surbrillance le graphique en anneau echarts. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Obtenez l'angle d'un certain secteur en calculant le pourcentage de la valeur du secteur dans tout le cercle, puis définissez l'angle auquel le graphique commence à s'afficher en fonction de l'attribut startAngle, de sorte que l'anneau tourne lorsqu'un secteur est cliqué. Visez toujours un certain point. Pendant

, étant donné qu'une certaine zone en forme d'éventail est trop petite pour être cliquée, la zone minimale en forme d'éventail est définie.

const myChartContainer = document.getElementById( 'chart' );
const myChart = echarts.init( myChartContainer );
let minAngle = 30;// 最小扇形区域为30
for ( let i = 0; i < obj.data.length; i++ ) { //某项数据为0时,最小扇形区域为0
 if ( obj.data[ i ].value === 0 ) {
  minAngle = 0;
  break;
 }
}
const pieValue = obj.data.map( v => { 
 return v.value;
} )
const sum = pieValue.reduce( ( prev, cur ) => {//数据值的总和
 return prev + cur;
}, 0 );
const sum2 = pieValue.reduce( ( prev, cur ) => {
 if ( cur < sum / 12 && cur > 0 ) {//某个值大于0小于总和的1/12即30时,按30计算和
  return prev + sum / 12;
 }
 return prev + cur;
}, 0 );
let initPieValue = pieValue[ 0 ];// 初始值
if ( initPieValue < sum / 12 && initPieValue > 0 ) {
 initPieValue = sum / 12;
}
const option = {
tooltip: {
 show: false,
 trigger: &#39;item&#39;,
 formatter: &#39;{a} <br/>{b}: {c} ({d}%)&#39;
},
legend: {
 show: false,
 orient: &#39;vertical&#39;,
 x: &#39;left&#39;
},
color: [ &#39;#44bbf8&#39;, &#39;#93e588&#39;, &#39;#ffd87b&#39;, &#39;#f88071&#39; ],
series: [
{
 name: &#39;&#39;,
 type: &#39;pie&#39;,
 radius: [ &#39;45%&#39;, &#39;79%&#39; ],
 clockWise: false,
 startAngle: 167 - ( initPieValue / sum2 * 360 / 2 ),
 minAngle: minAngle,
 avoidLabelOverlap: false,
itemStyle: {
 emphasis: {
  radius: [ &#39;46%&#39;, &#39;100%&#39; ]
 }
},
label: {
 normal: {
  show: false,
  position: &#39;center&#39;
 },
 emphasis: {
  show: false,
  textStyle: {
  fontSize: &#39;30&#39;,
  fontWeight: &#39;bold&#39;
  }
 }
},
labelLine: {
  normal: {
   show: false
  }
},
 data: obj.data
  }
 ]
};
myChart.setOption( option );
if ( minAngle === 30 ) {  //最小扇形区域30时
myChart.dispatchAction( { type: &#39;highlight&#39;, seriesIndex: 0, dataIndex: 0 } );
}
let preDataIndex = 0;
myChart.on( &#39;click&#39;, ( v ) => {
 if ( v.dataIndex === preDataIndex ) {
  myChart.dispatchAction( {
  type: &#39;highlight&#39;,
  seriesIndex: 0,
  dataIndex: v.dataIndex
 } );
 return;
}
const sum1 = pieValue.reduce( ( prev, cur, index ) => {
 if ( index < v.dataIndex ) {
  if ( cur < sum / 12 && cur > 0 ) {
   return prev + sum / 12; // 饼图的扇形最小角度设置为30,占圆的1/12
  }
  return prev + cur;
 }
 return prev;
}, 0 );
let curPieValue = pieValue[ v.dataIndex ];
if ( curPieValue < sum / 12 && curPieValue > 0 ) {
 curPieValue = sum / 12;
}
option.series[ 0 ].startAngle = 167 - ( sum1 / sum2 * 360 + curPieValue / sum2 * 360 / 2 );// 开始渲染图形的角度
myChart.setOption( option );
preDataIndex = v.dataIndex;
window.setTimeout( () => {
 myChart.dispatchAction( {
 type: &#39;highlight&#39;,
 seriesIndex: 0,
 dataIndex: v.dataIndex
 } );
}, 400 );
this.mrkName = v.data.name;
this.mrkValue = v.data.value;
} );

Recommandations associées :

vue+Echarts pour réaliser une mise en évidence des clics (avec code)

vue combinée avec Echarts Exemple de mise en œuvre de l'effet de mise en évidence des clics

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn