progress.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. var Progress = function(init){
  2. this.init(init)
  3. };
  4. Progress.prototype= {
  5. init:function (init) {
  6. this.el = init.el;//元素ID
  7. var cvsElement = document.getElementById(this.el),//获取元素
  8. ctx=cvsElement.getContext("2d"),//获取画笔
  9. width = cvsElement.width,//元素宽度
  10. height=cvsElement.height,//元素高度
  11. degActive=0,//动态线条
  12. timer=null;//定时器
  13. //停止时的角度
  14. this.deg = init.deg
  15. //线宽
  16. init.lineWidth !== undefined?
  17. this.lineWidth = init.lineWidth : this.lineWidth =20;
  18. //判断宽高较小者
  19. this.wh = width>height?height:width;
  20. //设置圆的半径,默认为宽高较小者
  21. init.circleRadius>0&&init.circleRadius<=this.wh/2-this.lineWidth/2?
  22. this.circleRadius = init.circleRadius:this.circleRadius = this.wh/2-this.lineWidth/2;
  23. //绘制线的背景颜色
  24. init.lineBgColor !==undefined?
  25. this.lineBgColor = init.lineBgColor:this.lineBgColor='#ccc';
  26. //绘制线的颜色
  27. init.lineColor !==undefined?
  28. this.lineColor = init.lineColor:this.lineColor='#009ee5';
  29. //绘制文字颜色
  30. init.textColor !==undefined?
  31. this.textColor = init.textColor:this.textColor='#009ee5';
  32. //绘制文字大小
  33. init.fontSize !==undefined?
  34. this.fontSize = init.fontSize:this.fontSize=parseInt(this.circleRadius/2);
  35. //执行时间
  36. this.timer = init.timer;
  37. //清除锯齿
  38. if (window.devicePixelRatio) {
  39. cvsElement.style.width = width + "px";
  40. cvsElement.style.height = height + "px";
  41. cvsElement.height = height * window.devicePixelRatio;
  42. cvsElement.width = width * window.devicePixelRatio;
  43. ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
  44. }
  45. //设置线宽
  46. ctx.lineWidth=this.lineWidth;
  47. //启动定时器
  48. timer = setInterval(function(){
  49. ctx.clearRect(0,0,width,height);//清除画布
  50. ctx.beginPath();//开始绘制底圆
  51. ctx.arc(width/2,height/2,this.circleRadius,1,8);
  52. ctx.strokeStyle=this.lineBgColor;
  53. ctx.stroke();
  54. ctx.beginPath();//开始绘制动态圆
  55. ctx.arc(width/2,height/2,this.circleRadius,-Math.PI/2,degActive*Math.PI/180-Math.PI/2);
  56. ctx.strokeStyle=this.lineColor;
  57. ctx.stroke();
  58. if(init.deg >= 0){
  59. var txt=(parseInt(degActive*100/360)+init.currtype);//获取百分比
  60. ctx.font=this.fontSize+"px SimHei";
  61. var w=ctx.measureText(txt).width;//获取文本宽度
  62. var h=this.fontSize/2;
  63. ctx.fillStyle=this.textColor;
  64. ctx.fillText(txt,width/2-w/2,height/2+h/2);
  65. if(degActive>=this.deg/100*360){//停止定时器
  66. clearInterval(timer);
  67. timer=null;
  68. }
  69. degActive++;
  70. }else{
  71. var txt=(init.deg+init.currtype);//获取百分比
  72. ctx.font=this.fontSize+"px SimHei";
  73. var w=ctx.measureText(txt).width;//获取文本宽度
  74. var h=this.fontSize/2;
  75. ctx.fillStyle=this.textColor;
  76. ctx.fillText(txt,width/2-w/2,height/2+h/2);
  77. clearInterval(timer);
  78. timer=null;
  79. }
  80. }.bind(this),this.timer);
  81. }
  82. };