2017-10-18 23 views
0

J'ai un graphique en forme d'anneau ChartJS que j'aimerais cliquer sur un segment et il affiche des informations sur le segment au centre du graphique. Cela fonctionne, mais chaque fois que la souris quitte le segment de graphique, les informations disparaissent, je veux qu'il reste jusqu'à ce qu'un autre segment de graphique soit cliqué.Dessiner sur du canevas permet d'effacer du texte lorsque la souris quitte le graphique

Je mets un exemple de base de cette situation sur JSFIDDLE

canvas.onclick = function(evt) { 
    var activePoints = donut.getElementsAtEvent(evt); 
    if(activePoints[0]) { 
     var chartData = activePoints[0]['_chart'].config.data; 
     var idx = activePoints[0]['_index']; 
     var label = chartData.labels[idx].toUpperCase(); 

     ctx.font = "bold 18px Verdana, Arial, sans-serif"; 
     var textWidth = ctx.measureText(label).width; 

     ctx.fillStyle = "#000"; 
     ctx.fillText(label, (250/2) - (textWidth/2), (250/2)); 
    } 
}; 

Comment puis-je maintenir le texte dans le centre de la carte?

Répondre

1

Ne dessinez pas sur le canevas directement (car il est géré par Chart.js). Utilisez plutôt plugin api. Vous pouvez utiliser l'un des crochets fournis - par exemple afterDraw pour dessiner vos éléments une fois le graphique dessiné.

travail jsFiddle:
https://jsfiddle.net/fa7s5q30/12/

+0

Pouvez-vous obtenir que travailler dans le jsFiddle? J'ai essayé et rien n'est différent (https://jsfiddle.net/fa7s5q30/7/). Déplacer tout le code à 'afterDraw' donne https://jsfiddle.net/fa7s5q30/8/. – anothershrubery

+0

Bien sûr, j'ai mis à jour ma réponse. 'afterDraw' est appelé à chaque fois que le graphique est repeint (ce qui est également le cas lors du déplacement de la souris). Vous devez donc stocker l'étiquette sélectionnée quelque part, sinon elle sera effacée. J'ai choisi de l'attacher à l'instance de graphique. –

+0

Cela fonctionne très bien dans Chrome, mais il n'affiche pas le graphique dans IE11. Ne signale aucun problème dans le débogueur non plus. En tout cas ça? – anothershrubery