Поскольку вы не даете мне результат config()
, я изобрел объект config
.
Я пытался сделать это так, как вы хотели.Я бы организовал данные по-другому.
Для того, чтобы анимировать бары, которые я использую requestAnimationFrame
, так как они намного эффективнее.Если вы предпочитаете, вы можете использовать setInterval()
.
Пожалуйста, прочитайте комментарии в моем коде.
let canvas = document.getElementById('chart');
let ctx = canvas.getContext('2d');
canvas.height = 150;
canvas.width = 400;
let config = {width:30,height:0,spaceBetweenBars:5,color:"green"};
let values = [35,48,98,34,55];
// copy the values array and fill it with 0.
// This is the value of bars height during the animation
let currentValues = values.slice().fill(0); // [0,0,0,0,0]
let startingX = 50;
function drawBar(height,i){
let x = startingX;
x += i*(config.width + config.spaceBetweenBars);
ctx.fillStyle = config.color;
ctx.beginPath();
ctx.fillRect(x, canvas.height, config.width, -height);
}
// I'm using requestAnimationFrame since it's much more efficient.
function drawChart(){
window.requestAnimationFrame(drawChart);
for(let i = 0; i < values.length;i++) {
if(currentValues[i] < values[i]){
currentValues[i] ++;
drawBar(currentValues[i],i)
}
}
}
drawChart()
canvas{border:1px solid;}
<canvas id="chart"></canvas>