paintForegroundBars(hours: Array<number>) {
let barColor = "#b3bec9";
let numBars = hours.length;
let barWidth = Math.floor((this.canvasWidth/numBars) - this.barsSpacing);
let maxBarHeight = this.canvasHeight - (this.timesHeight + (this.timesSpacing * 2));
let barLeft = 0 + (this.barsSpacing/2);
this.canvasContext.fillStyle = barColor;
this.canvasContext.strokeStyle = barColor;
this.canvasContext.lineJoin = "round";
this.canvasContext.lineWidth = this.cornerRadius;
for (let i = 0; i < numBars; i++) {
let barHeight = Math.round(maxBarHeight * hours[i]);
if (barHeight > 0) {
let barTop = maxBarHeight - barHeight;
let roundedBarTop = barTop + (this.cornerRadius/2);
let roundedBarLeft = barLeft + (this.cornerRadius/2);
let roundedBarWidth = barWidth - this.cornerRadius;
let roundedBarHeight = barHeight - this.cornerRadius;
this.canvasContext.strokeRect(roundedBarLeft, roundedBarTop, roundedBarWidth, roundedBarHeight);
this.canvasContext.fillRect(roundedBarLeft, roundedBarTop, roundedBarWidth, roundedBarHeight);
}
barLeft = Math.floor(barLeft + barWidth) + (this.barsSpacing);
}
}
На данный момент я рисую высоту гистограммы с кодом ниже:Холст как анимировать высоту от 0 до заданной высоты.
this.canvasContext.strokeRect(roundedBarLeft, roundedBarTop, roundedBarWidth, roundedBarHeight);
this.canvasContext.fillRect(roundedBarLeft, roundedBarTop, roundedBarWidth, roundedBarHeight);
Вместо того, чтобы, когда это работает она просто быть фиксированной высотой я хочу, чтобы анимировать от 0 до высоты который был рассчитан в моем JS. Как вы это делаете?
Большое спасибо
Я бы используйте библиотеку для tweening, например TweenMax https://greensock.com/tweenmax, или вы можете реализовать свой собственный с помощью requestAnimationFrame и формулу, которую вы можете найти здесь http://gizma.com/easing/ –
Спасибо, но lib isn ' отлично, когда я делаю т его как учебный опыт для получения знаний! –