zoukankan      html  css  js  c++  java
  • canvas 环形进度条

      今天写了一个canvas的环形进度条,比较简单,直接贴代码

      

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <title></title>
     6         <style>
     7             #canvas {
     8                 border: 1px solid #000;
     9             }
    10         </style>
    11     </head>
    12     <body>
    13         <canvas id="canvas" width="300" height="300"></canvas>
    14         <script>
    15             window.onload = function(){
    16                 var canvas = document.getElementById('canvas')
    17                 var context = canvas.getContext('2d')
    18                 function draw(option){
    19                     // 兼容处理
    20                     window.reqAnimFrame = (function(){
    21                       return  window.requestAnimationFrame       ||
    22                               window.webkitRequestAnimationFrame ||
    23                               window.mozRequestAnimationFrame    ||
    24                               function( callback ){
    25                                 window.setTimeout(callback, 1000 / 60);
    26                               };
    27                     })();
    28 
    29                     var perc       = option.perc || 100;         // perc      进度
    30                     var lColor     = option.lColor || "#ccc";    // lColor    进度条颜色
    31                     var BackColor  = option.BackColor || "#000"; // BackColor 背景条颜色
    32                     var lw         = option.lw || 10;            // lw        进度条宽度
    33                     var lwBack     = option.lwBack || 20;        // lwBack    背景条宽度
    34                     var fontSize   = option.fontSize || "30px";  // fontSize  进度数字大小
    35                     var callBack   = option.callBack;            // callBack  完成进度的回调
    36                     var x = 0;
    37                     context.lineCap = 'round';
    38                     context.font = fontSize+" Arial";
    39                     function ready(){
    40                         if(x < perc){
    41                             context.clearRect(0,0,canvas.width , canvas.height);
    42                             x++;
    43                             context.lineWidth = lwBack;
    44                             context.beginPath()
    45                             context.strokeStyle  = BackColor;
    46                             context.arc(canvas.width/2, canvas.height/2, 100, 0,2*Math.PI)
    47                             context.stroke()
    48                             context.lineWidth = lw;
    49                             context.beginPath()
    50                             context.strokeStyle  = lColor;
    51                             context.arc(canvas.width/2, canvas.height/2, 100, 0,x*0.02*Math.PI)
    52                             context.fillText(x+'%',(canvas.width/2),(canvas.height/2)+10);
    53                             context.textAlign="center";
    54                             context.stroke()
    55                             reqAnimFrame(ready)
    56                         }else {
    57                             callBack && callBack()
    58                             // 达到目标值之后的回调
    59                         }
    60                     }
    61                     ready()
    62                 }
    63                 draw({
    64                     fontSize: '50px',
    65                     BackColor: 'blue',
    66                     lw:10,
    67                     perc:100,
    68                     callBack:function(){
    69                         console.log('完成进度动画')
    70                     }
    71                 })
    72             }
    73         </script>
    74     </body>
    75 </html>

      效果如下

      

      值得说的一点,动画采用的 requestAnimationFrame()  方法还是很不错的,我认为是可以完全取代定时器去完成动画的方法,无论从性能,效果都要比定时器舒服很多,唯一的就是兼容性存在问题,这次只是封装了一个小方法,以后还会再去完善,溜了溜了。

      

  • 相关阅读:
    HDU-2544-最短路(floyd)
    HDU-1009-肥鼠交易
    BZOJ-3029: 守卫者的挑战 (期望DP)
    2017年10月23日23:58:04
    BZOJ-2456: mode (神题)
    BZOJ-4542: [Hnoi2016]大数 (莫队算法)
    BZOJ-2120: 数颜色 (带修改莫队)
    BZOJ-2654: tree (kruskal)
    BZOJ-1040: [ZJOI2008]骑士 (树形DP)
    BZOJ-3505: [Cqoi2014]数三角形 (容斥原理+排列组合)
  • 原文地址:https://www.cnblogs.com/dongwy/p/7880151.html
Copyright © 2011-2022 走看看