向下滚动

时间:2016-07-16 13:57:05

标签: javascript html5-canvas progress-bar

我想在我的网页上放置四个不同的循环进度条,它将被放置在一个特定的div上。在该div上滚动我希望它们在同一时间处于活动状态并按指定的百分比完成。 只有一个工作正常。我怎么能这样做?这是附加的代码。

var ctx = document.getElementById('my_canvas').getContext('2d');
var al = 0;
var start = 4.72;
var cw = ctx.canvas.width;
var ch = ctx.canvas.height;
var diff;

function progressSim() {
  diff = ((al / 100) * Math.PI * 2 * 10).toFixed(2);
  ctx.clearRect(0, 0, cw, ch);
  ctx.lineWidth = 5;
  ctx.fillStyle = '#09F';
  ctx.strokeStyle = "#09F";
  ctx.textAlign = 'center';
  ctx.fillText(al + 'K TOURIST', cw * .5, ch * .5 + 2, cw);
  ctx.beginPath();
  ctx.arc(35, 35, 30, start, diff / 10 + start, false);
  /*ctx.arc(200,75,50,0*Math.PI,1.5*Math.PI);*/
  ctx.stroke();
  if (al >= 50) {
    clearTimeout(sim);
    // Add scripting here that will run when progress completes
  }
  al++;
}
var sim = setInterval(progressSim, 50);
<div id="first_progress">
  <canvas id="my_canvas" width="70" height="70" style="border:1px dashed #CCC;"></canvas>
</div>
<div id="second_progress">
  <canvas id="my_canvas2" width="70" height="70" style="border:1px dashed #CCC;"></canvas>
</div>

1 个答案:

答案 0 :(得分:0)

它似乎只更新一个画布。您需要使用两个不同的上下文更新两个画布。或者你可以将进度条绘制到相同但更大的画布上。

这个例子无助于使用四个。您需要为每个条形存储不同的角度和进度,但它会显示如何更新示例中的两个。

希望它成功。 ps - 使用数组来存储ctx和值。这样容易得多。

var ctx = document.getElementById('my_canvas').getContext('2d');
var ctx2 = document.getElementById('my_canvas2').getContext('2d');
var al = 0;
var start = 4.72;
var cw = ctx.canvas.width;
var ch = ctx.canvas.height;
var diff;

function progressSim(ctx, simInx) {
  diff = ((al / 100) * Math.PI * 2 * 10).toFixed(2);
  ctx.clearRect(0, 0, cw, ch);
  ctx.lineWidth = 5;
  ctx.fillStyle = '#09F';
  ctx.strokeStyle = "#09F";
  ctx.textAlign = 'center';
  ctx.fillText(al + 'K TOURIST', cw * .5, ch * .5 + 2, cw);
  ctx.beginPath();
  ctx.arc(35, 35, 30, start, diff / 10 + start, false);
  /*ctx.arc(200,75,50,0*Math.PI,1.5*Math.PI);*/
  ctx.stroke();
  if (al >= 50) {
    clearTimeout(simInx == 1 ? sim1 : sim2);
    // Add scripting here that will run when progress completes
  }
  al++;
}
var sim1 = setInterval(progressSim, 50, ctx, 1);
var sim2 = setInterval(progressSim, 50, ctx2, 2);
<div id="first_progress">
  <canvas id="my_canvas" width="70" height="70" style="border:1px dashed #CCC;"></canvas>
</div>
<div id="second_progress">
  <canvas id="my_canvas2" width="70" height="70" style="border:1px dashed #CCC;"></canvas>
</div>