cycle.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. // JavaScript Document
  2. //created by zcy 20161011
  3. ;(function($,window,document,undefined){
  4. //默认参数var this.PARAMS;
  5. var plugin=function(ele, opt){
  6. this.parent=ele;
  7. this.defaults= {percent:100 ,w:500,oneCircle:"false"};
  8. //初始化参数
  9. this.PARAMS=$.extend({},this.defaults,opt) ;
  10. this.DrawCircle();
  11. }
  12. //定义方法
  13. plugin.prototype={
  14. DrawCircle:function(){
  15. if(!canvasSupport()){
  16. return
  17. }
  18. var drawOne=this.PARAMS.oneCircle;
  19. var r=this.PARAMS.w/2;
  20. var r1=this.PARAMS.w/2-20;
  21. var x1=this.PARAMS.w/2;
  22. var y1=this.PARAMS.w/2;
  23. var canvas=this.parent[0];
  24. var tip=this.PARAMS.percent;
  25. var angle="";
  26. var init=0;
  27. var initA=0;
  28. var preM=0;
  29. var initM=0; //因为是半圆 所以初始角度是Math.PI;
  30. var s=2*Math.PI/180;
  31. var bottomC=Math.PI;
  32. var allCount=180;
  33. var allCountP=1.8;
  34. var poinits=new Array();
  35. if(drawOne=="ture"){
  36. angle=tip*2*Math.PI/100;
  37. canvas.width=this.PARAMS.w;
  38. canvas.height=this.PARAMS.w;
  39. bottomC=2*Math.PI;
  40. allCount=0;
  41. allCountP=3.6;
  42. }else{
  43. angle=tip*Math.PI/100+Math.PI;
  44. canvas.width=this.PARAMS.w;
  45. canvas.height=this.PARAMS.w/2;
  46. init=180;
  47. preM=Math.PI;
  48. initM=Math.PI; //因为是半圆 所以初始角度是Math.PI;
  49. s=2*Math.PI/180;
  50. }
  51. var cxt=canvas.getContext("2d");
  52. //cxt.lineCap="round";
  53. cxt.lineWidth=6;
  54. var speed=1;
  55. var radius=this.PARAMS.w/2-2;
  56. var ball={x:0,y:0,speed:2};
  57. var T1;
  58. function drawScreen(){
  59. cxt.fillStyle="#ffffff";
  60. cxt.fillRect(0,0,canvas.width,canvas.height);
  61. //创建圆环与虚线
  62. //底圆
  63. cxt.beginPath();
  64. cxt.strokeStyle="#fb9aa1";
  65. cxt.arc(x1,y1,r1-6,0,bottomC,true);
  66. cxt.stroke(); //先执行stroke 就不会出现横线
  67. cxt.closePath();
  68. //虚线
  69. var balls=[];
  70. var balls=new Array();
  71. for(var i=initA;i<=360;i+=ball.speed){
  72. var radians=(i)*(Math.PI/180);
  73. ball.x=x1+Math.cos(radians)*radius;
  74. ball.y=y1+Math.sin(radians)*radius;
  75. balls.push({x:ball.x,y:ball.y});
  76. }
  77. for(var i=0;i<balls.length;i++){
  78. cxt.fillStyle="#a7a7a7";
  79. cxt.beginPath();
  80. cxt.arc(balls[i].x,balls[i].y,1,0,Math.PI*2,false);
  81. //console.log(balls[i].x)
  82. cxt.closePath();
  83. cxt.fill();
  84. }
  85. //画实线
  86. if(initM<angle){
  87. initM+=s;
  88. }else{
  89. initM=angle;
  90. }
  91. cxt.beginPath();
  92. cxt.strokeStyle="#96000c";
  93. cxt.arc(x1,y1,r1-6,0,initM,false);
  94. cxt.stroke(); //先执行stroke 就不会出现横线
  95. cxt.closePath();
  96. //画虚线
  97. if(init<tip*allCountP+allCount){ //小于初始角度
  98. init+=ball.speed
  99. }else{
  100. clearInterval(T1);
  101. }
  102. for(var i=initA;i<=init;i+=2){
  103. var radians2=i*(Math.PI/180);
  104. var a1=x1+Math.cos(radians2)*radius;
  105. var a2=y1+Math.sin(radians2)*radius;
  106. cxt.fillStyle="#96000c";
  107. cxt.beginPath();
  108. cxt.arc(a1,a2,1,0,Math.PI*2,false);
  109. //console.log(balls[i].x)
  110. cxt.closePath();
  111. cxt.fill();
  112. }
  113. //百分比文字
  114. cxt.font="20px sans bold";
  115. cxt.textBaseline="middle";
  116. cxt.textAlign="center";
  117. cxt.fillStyle="#96000c";
  118. var messT=tip*initM/angle;
  119. /*if(drawOne!="ture"){
  120. messT=tip*(initM)/angle;
  121. console.log(initM-Math.PI)
  122. }*/
  123. if(messT>tip){
  124. messT=tip
  125. }
  126. var mess="已完成"+messT.toFixed(2)+"%";
  127. cxt.fillText(mess,canvas.width/2,canvas.height/1.5);
  128. cxt.font="14px sans";
  129. cxt.textBaseline="middle";
  130. cxt.textAlign="center";
  131. cxt.fillStyle="#333";
  132. var mesT=tip*initM/angle;
  133. /*if(drawOne!="ture"){
  134. messT=tip*(initM)/angle;
  135. console.log(initM-Math.PI)
  136. }*/
  137. if(mesT>tip){
  138. mesT=tip
  139. }
  140. var mes="目标步数10000步";
  141. cxt.fillText(mes,canvas.width/2,canvas.height/1.15);
  142. }
  143. //
  144. T1=setInterval(drawScreen,30)
  145. }
  146. }
  147. function canvasSupport(){
  148. //判断是否支持canvas标签
  149. return Modernizr.canvas;
  150. }
  151. //在插件中使用plugin对象
  152. $.fn.audios2=function(options){
  153. //创建实体
  154. var plugina=new plugin(this,options);
  155. }
  156. })(jQuery,window,document);