用HTML5canvas绘制一个圆环形的进度表示
匿名 · 更新于 2014/9/8
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<title>用HTML5canvas绘制一个圆环形的进度表示</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
</head>
<body>
<canvas class="process" width="100px" height="100px">61%</canvas>
<script type="text/javascript">
function drawProcess() {
// 选出页面上所有class为process的canvas元素,然后迭代每一个元素画图(这里用Jquery的选择器选的)
$('canvas.process').each(function() {
// 第一部先拿到canvas标签中间的文字,就是那个61%(这里的stringTrim方法是我自己的方法,去前后空格的方法很多的,这里就不贴出来了)
var text = $(this).text();
var process = text.substring(0, text.length - 1);
// 一个canvas标签
var canvas = this;
// 拿到绘图上下文,目前只支持"2d"
var context = canvas.getContext('2d');
// 将绘图区域清空,如果是第一次在这个画布上画图,画布上没有东西,这步就不需要了
context.clearRect(0, 0, 48, 48);
// ***开始画一个灰色的圆
context.beginPath(); // 坐标移动到圆心
context.moveTo(50, 50);
// 画圆,圆心是24,24,半径24,从角度0开始,画到2PI结束,最后一个参数是方向顺时针还是逆时针
context.arc(50, 50, 50, 0, Math.PI * 2, false);
context.closePath();
// 填充颜色
context.fillStyle = '#ddd';
context.fill();
// ***灰色的圆画完
// 画进度
context.beginPath();
// 画扇形的时候这步很重要,画笔不在圆心画出来的不是扇形
context.moveTo(50, 50);
// 跟上面的圆唯一的区别在这里,不画满圆,画个扇形
context.arc(50, 50, 50, 0, Math.PI * 2 * process / 100, false);
context.closePath();
context.fillStyle = '#e74c3c';
context.fill();
// 画内部空白
context.beginPath();
context.moveTo(50, 50);
context.arc(50, 50, 42, 0, Math.PI * 2, true); //第三个参数控制圆环粗细
context.closePath();
context.fillStyle = 'rgba(255,255,255,1)';
context.fill();
// 画一条线
context.beginPath();
context.arc(50, 50, 18.5, 0, Math.PI * 2, true);
context.closePath();
// 与画实心圆的区别,fill是填充,stroke是画线
context.strokeStyle = '#fff';
context.stroke();
//在中间写字
context.font = "bold 9pt Arial";
context.fillStyle = '#e74c3c';
context.textAlign = 'center';
context.textBaseline = 'middle';
context.moveTo(50, 50);
context.fillText(text, 50, 50);
})
}
drawProcess()
</script>
</body>
</html>
