Это простой случай знания некоторой тригонометрии и API текста холста.
Я использовал значения cos и sin от угла центра соответствующего среза, чтобы установить горизонтальное и вертикальное выравниваниетекст, например:
this.ctx.textAlign = cos > 0 ? 'start' : 'end';
this.ctx.textBaseline = sin > 0 ? 'top' : 'bottom';
Кроме того, я добавил еще два параметра в конструктор круговой диаграммы:
const monthlyPaymentChart = new Piechart({
canvas: canvas,
data: paymentInformation,
colors: pieChartColors,
doughnutHoleSize: 0.85,
labelDistanceFromOuterEdge: 5,
roomForLabels: 65,
});
roomForLabels - сообщает, сколько места нужно зарезервировать дляметки
отображаются вне круговой диаграммы в пикселях.Если ширина какого-либо ярлыка не помещается на холсте, это значение увеличивается, чтобы вместить его.
labelDistanceFromOuterEdge - как далеко метки находятся от края
круговая диаграмма в пикселях.
Для измерения текста я использовал функцию measureText API-интерфейса canvas 2d context.Вот почему шрифт и размер текста также задаются в начале конструктора Piechart
Полный код можно найти здесь: https://codepen.io/prtjohanson/pen/bZgQmY