JavaScriptの単純なプログレスバーをhtml 5 canvas要素を使って実装しました。プログレスバーは100ステップを表示できます。 (0-100%) プログレスバーは可変サイズを持つことができます。 したがって、すべてのステップについて、私は矩形を描きます。プログレスバーのステップをJavaScriptのピクセルに変換する
例: - プログレスバーキャンバスの幅は100ピクセルです。 - すべてのステップで、新しい1ピクセル幅のブロックを描画します。
問題: - プログレスバーキャンバスの幅は550pxです。 - ステップブロックサイズは5.5ピクセル(550 /ステップ)です - 半ピクセルを描画できません。 Math.floorまたはMath.Roundを使用すると、プログレスバーは100%で完全に記入されないか、または「過剰充填」されます。
どうすれば問題を解決できますか?
var percWidth = Math.round(canvas.width/100);
for (var i = 0; i<= percentage; i++)
{
var r,g,b;
if (i <= 50)
{
r = 255;
g = Math.round((255*i)/50);
b = 0;
}
else
{
r = Math.round((255*(100-i))/50);
g = 255;
b = 0
}
context.fillStyle = "rgb("+r+", "+g+", "+b+")";
context.fillRect((i*percWidth), 0, (1*percWidth), canvas.height);
}
代わりに '.ceil()'を使用してください。それは小数値の次の整数に切り上げられます。 –
しかし、ceil()は6pxに丸められませんか? 100%で600pixel(そして92%でバーは完全に塗りつぶされます)になります。 – Konerak
申し訳ありませんが、これは私の場合はaround()のようにも動作します。それはバーを "オーバーフィル"します。 Konerakの答えはうまくいった。それでも、ありがとう! – netblognet