<!DOCTYPE html> <html> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /> <head> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; } </style> <script type="text/javascript" src="js/Progress.js"></script> </head> <body> <canvas id="canvas1"></canvas> <canvas id="canvas2"></canvas> <canvas id="canvas3"></canvas> <canvas id="canvas4"></canvas> <canvas id="canvas5"></canvas> <canvas id="canvas6"></canvas> <canvas id="canvas7"></canvas> <canvas id="canvas8"></canvas> <canvas id="canvas9"></canvas> <canvas id="canvas10"></canvas> <script type="text/javascript"> window.onload = function(){ var num = Math.round(4.8/5*100); var num2 = Math.round(4.9/5*100); new Progress().renderOne('canvas1',100,5,10);//id,大小,边框粗细,百分比 new Progress().renderOne('canvas2',100,5,20); new Progress().renderOne('canvas3',100,5,30); new Progress().renderOne('canvas4',100,5,40); new Progress().renderOne('canvas5',100,5,50); new Progress().renderOne('canvas6',100,5,60); new Progress().renderOne('canvas7',100,2,70); new Progress().renderOne('canvas8',100,10,num); new Progress().renderOne('canvas9',100,10,num2); new Progress().renderOne('canvas10',100,10,100); } </script> </body> </html>
var Progress = function() { var progress = { textheight: null, renderOne: function(id, length, r, percent) { var canvas = document.getElementById(id); var context = canvas.getContext("2d"); canvas.width = length; canvas.height = length; var i = 0; var interval = setInterval(function() { i++; progress.render(context, length, r, i, percent); if (i >= percent) { clearInterval(interval) } }, 10) }, render: function(context, length, r, i, percent) { context.clearRect(0, 0, length, length); context.beginPath();//起始一条路径,或重置当前路径 var gradient = context.createLinearGradient(length, 0, 0, 0); //定义一个渐变作为填充样式 gradient.addColorStop("0", "#5514f2"); gradient.addColorStop("1.0", "#7633f8"); context.strokeStyle = gradient; //设置或返回用于笔触的颜色、渐变或模式,这里是渐变 context.lineWidth = r;//设置或返回当前的线条宽度 //绘制顺时针的1/4圆 if(percent==100){ //如果是百分百的时候显示起点和结束点都是一个位置 context.arc(length / 2, length / 2, length / 2 - r, -0.2 * Math.PI, -0.2 * Math.PI + i * 0.02 * Math.PI, false); }else{ context.arc(length / 2, length / 2, length / 2 - r, -0.2 * Math.PI, -0.25 * Math.PI + i * 0.02 * Math.PI, false); } //context.arc(length / 2, length / 2, length / 2 - r, 1.8 * Math.PI, 1.78 * Math.PI + i * 0.02 * Math.PI, false); context.stroke(); //绘制已定义的路径 context.closePath(); //创建从当前点回到起始点的路径 context.beginPath(); //起始一条路径,或重置当前路径 context.lineCap = 'round';//设置或返回线条的结束端点样式,butt 默认。向线条的每个末端添加平直的边缘。round 向线条的每个末端添加圆形线帽。square 向线条的每个末端添加正方形线帽 。 //设置字体样式 context.font = "bold " + (length / 2 - 1 * r) / 2 + "px 微软雅黑"; context.fillStyle = "#5515f2"; //var text = percent + "%";//占比百分数 var val = percent/100*5; //占比百分数/5=评分 var text = Math.round(val * 10) / 10; //四舍五入保留一位小数 textwidth = context.measureText(text).width; //在画布上输出文本之前,检查字体的宽度: if (this.textheight == null) { var div = document.createElement("div"); document.body.appendChild(div); div.innerHTML = text; div.style.fontSize = ((length / 2 - 1 * r) / 2) + "px"; this.textheight = div.offsetHeight; div.parentNode.removeChild(div) } textheight = this.textheight; context.fillText(text, (length - textwidth) / 2, length / 2 + textheight / 4); context.fill(); context.closePath() } }; return progress };