• canvas圆环进度


    CSS:

    <div class="circle">
    	<p><span id="loadedNum">0</span>%</p>
    	<div class="bg" id="bg"></div>
    	<canvas class="mask" width="204" height="204" ></canvas>
    </div>
    

      

    HTML:

    <div class="circle">
        <p><span id="loadedNum">0</span>%</p>
        <div class="bg" id="bg"></div>
        <canvas class="mask" width="204" height="204" ></canvas>
    </div>
    

    JS:

    function inte(percent) {
        if (percent < 0 || percent > 100) {
            throw new Error('percent must be between 0 and 100');
            return
        }
        var canvas = document.querySelector('canvas');
        var ctx = canvas.getContext('2d');
        ctx.lineWidth = 10;
        ctx.strokeStyle = "red";
        var angle = 0;
        var timer;
        (function draw() {
            timer = requestAnimationFrame(draw);
            ctx.beginPath();
            ctx.arc(canvas.width / 2, canvas.height / 2, 100, 0, angle * Math.PI / 180, false);
            angle++
            var percentAge = parseInt((angle / 360) * 100)
            if (angle > (percent / 100 * 360)) {
                percentAge = percent
                window.cancelAnimationFrame(timer);
            };
            document.querySelector('#loadedNum').innerHTML = percentAge;
            ctx.stroke();
        })()
    }
    window.onload = inte(20)
    

    DEMO地址:http://codepen.io/jonechen/pen/vGWZQW

    上面这个demo已经实现了百分比圆环进度,但是不足的是,使用了div和canvas两个元素的组合,可以再进化一下,HTML部分去掉div,都使用canvas来实现;见代码:

    CSS:

    *{padding: 0; margin: 0; }
    .circle{ 200px;height: 200px;margin: 20em auto;position: relative;}
    canvas{display: block;margin: 0;position: absolute;background: white;left: 0;top: 0;}
    #canvas_1{z-index: 1 }
    #canvas_2{z-index: 2; background: transparent;transform:rotate(-90deg); }
    

    HTML:

    <div class="circle">
         <canvas id="canvas_1" width="200" height="200"></canvas>
         <canvas id="canvas_2" width="200" height="200"></canvas>
    </div>
    

    JS:

    function inte(percent) {
        var canvas_1 = document.querySelector('#canvas_1');
        var canvas_2 = document.querySelector('#canvas_2');
        var ctx_1 = canvas_1.getContext('2d');
        var ctx_2 = canvas_2.getContext('2d');
        ctx_1.lineWidth = 10;
        ctx_1.strokeStyle = "#ccc";
        //画底部的灰色圆环
        ctx_1.beginPath();
        ctx_1.arc(canvas_1.width / 2, canvas_1.height / 2, canvas_1.width / 2 - ctx_1.lineWidth / 2, 0, Math.PI * 2, false);
        ctx_1.closePath();
        ctx_1.stroke();
        if (percent < 0 || percent > 100) {
            throw new Error('percent must be between 0 and 100');
            return
        }
        ctx_2.lineWidth = 10;
        ctx_2.strokeStyle = "#f90";
        var angle = 0;
        var timer;
        (function draw() {
            timer = requestAnimationFrame(draw);
            ctx_2.clearRect(0, 0, canvas_2.width, canvas_2.height)
            //百分比圆环
            ctx_2.beginPath();
            ctx_2.arc(canvas_2.width / 2, canvas_2.height / 2, canvas_2.width / 2 - ctx_2.lineWidth / 2, 0, angle * Math.PI / 180, false);
            angle++;
            var percentAge = parseInt((angle / 360) * 100)
            if (angle > (percent / 100 * 360)) {
                percentAge = percent
                window.cancelAnimationFrame(timer);
            };
            ctx_2.stroke();
            ctx_2.closePath();
            ctx_2.save();
            ctx_2.beginPath();
            ctx_2.rotate(90 * Math.PI / 180)
            ctx_2.font = '30px Arial';
            ctx_2.fillStyle = 'red';
            var text = percentAge + '%';
            ctx_2.fillText(text, 80, -90);
            ctx_2.closePath();
            ctx_2.restore();
        })()
    }
    window.onload = inte(60);
    

    DEMO地址:http://codepen.io/jonechen/pen/BKmOPX

  • 相关阅读:
    零代码实现接口自动化测试RF框架实践
    【js】script标签中的async和defer属性
    【vue】preload与prefetch的使用和区别
    【js】对象属性名为对象时
    【vue】 vuedevtoos 工具
    【js】call、apply和bind的区别
    【js】防抖节流理解及应用场景
    Arthas(3):jvm相关命令
    frp:通过公网域名访问内网机器
    Arthas(5):monitor watch trace 相关
  • 原文地址:https://www.cnblogs.com/jone-chen/p/5355490.html
Copyright © 2020-2023  润新知