Ваш код не является полным примером, и неясно, какую анимацию вы хотите использовать на индикаторе выполнения, но прямоугольник, который вы рисуете с fillRect
, имеет фиксированный размер:
ctx.fillRect(0, 0, 2000, 75);
Поскольку ширина прямоугольника всегда равна 2000, анимации прогресса не будет ...
Начнем с простого фрагмента, который анимирует индикатор выполнения.
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var rainbow = ctx.createLinearGradient(10, 0, canvas.width, 0);
rainbow.addColorStop(0, 'rgba(26, 188, 156, .9)'); //blue
rainbow.addColorStop(1 / 5, 'rgba(52, 152, 219, .9)'); //green
rainbow.addColorStop(2 / 5, 'rgba(241, 196, 15, .9)'); //yellow
rainbow.addColorStop(3 / 5, 'rgba(230, 126, 34, .9)'); //orange
rainbow.addColorStop(4 / 5, 'rgba(211, 84, 0, .9)'); //redish
rainbow.addColorStop(1, 'rgba(250, 0, 0, .9)'); //red
var size = 50
function animate() {
if (size < canvas.width) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = rainbow;
ctx.fillRect(0, 10, size++, 25);
}
}
setInterval(animate, 20);
<canvas id="canvas" width=600></canvas>
В этом примере градиент радуги является статическим, и я увеличиваю размер прямоугольника.