setTimeout () и canvas не работают, как задумано - PullRequest
0 голосов
/ 20 февраля 2012

Вот мой код.Я создал шаблон VIBGOYR на холсте и хочу изменить радиальный градиент системы через некоторый промежуток времени, чтобы он выглядел анимированным.

function activate(index){
  canvas =document.getElementById("exp");
  context = canvas.getContext('2d');

  //Start.
  draw(index);

  //Functions.
    function draw(index){
      drawGradiantSq(index);
      var t=setTimeout(doTimer,1000);
  }

  function doTimer(){
      draw(index+10);
  }

  function drawGradiantSq(fi){
      console.log(fi);
      var g1 = context.createRadialGradient(0,300,0,500,300,fi);
      colors = ["violet","indigo","blue","green","orange","yellow","red"];
      var x= 1/12;

      for (var i=0;i<colors.length;i++){
          g1.addColorStop(i*x,colors[i]);
      }
      context.fillStyle = g1;
      context.fillRect(0,0,500,600);

      var g2 = context.createRadialGradient(1000,300,0,500,300,fi);

      for (var i=0;i<colors.length;i++){
          g2.addColorStop(i*x,colors[i]);
      }
      context.fillStyle = g2;
      context.fillRect(500,0,1000,600);
  }
}

Но вывод, который я получаю, только изменяет градиент только один раз, хотя таймер, кажется, работает нормально.HTML-файл:

<body>
    <canvas id="exp" width="1000px" height="600px"></canvas>
    <button onclick="activate(index+=10);">Paint</button>
</body>

Индекс переменной является глобальной переменной, установленной на 0.

1 Ответ

2 голосов
/ 20 февраля 2012

Попробуйте использовать setInterval вместо setTimeout.

setTimeout запускается только один раз: 'setInterval' против 'setTimeout'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...