• canvas实现半圆环形进度条


    html部分

    <canvas id="canvas" width="150" height="150">
            <p>抱歉,您的浏览器不支持canvas</p>
    </canvas>

    js部分

    toCanvas('canvas','red',30);
        
        /**
         *  生成环形进度条
         */
        function toCanvas(id, color, progress) {
            //canvas进度条
            var canvas = document.getElementById(id),
                ctx = canvas.getContext("2d"),
                percent = progress, //最终百分比
                circleX = canvas.width / 2, //中心x坐标
                circleY = canvas.height / 2, //中心y坐标
                radius = 60, //圆环半径
                cradius = 75, // canvas半径
                lineWidth = 6, //圆形线条的宽度
                fontSize = 20; //字体大小
            //两端圆点
            function smallcircle1(cx, cy, r) {
                ctx.beginPath();
                //ctx.moveTo(cx + r, cy);
                ctx.lineWidth = 1;
                ctx.fillStyle = '#06a8f3';
                ctx.arc(cx, cy, r, 0, Math.PI * 2);
                ctx.fill();
            }
        
            function smallcircle2(cx, cy, r) {
                ctx.beginPath();
                //ctx.moveTo(cx + r, cy);
                ctx.lineWidth = 1;
                ctx.fillStyle = '#fff';
                ctx.arc(cx, cy, r, 0, Math.PI * 2);
                ctx.fill();
            }
        
            //画圆
            function circle(cx, cy, r) {
                ctx.beginPath();
                //ctx.moveTo(cx + r, cy);
                ctx.lineWidth = lineWidth;
                ctx.strokeStyle = '#eee';
                ctx.arc(cx, cy, r, Math.PI * 2 / 3, Math.PI * 1 / 3);
                ctx.stroke();
            }
        
            //画弧线
            function sector(cx, cy, r, startAngle, endAngle, anti) {
                ctx.beginPath();
                //ctx.moveTo(cx, cy + r); // 从圆形底部开始画
                ctx.lineWidth = lineWidth;
        
                // 渐变色 - 可自定义
                //                      var linGrad = ctx.createLinearGradient(
                //                          circleX-radius-lineWidth, circleY, circleX+radius+lineWidth, circleY
                //                      );
                //                      linGrad.addColorStop(0.0, '#06a8f3');
                //                      //linGrad.addColorStop(0.5, '#9bc4eb');
                //                      linGrad.addColorStop(1.0, '#00f8bb');
                //                      ctx.strokeStyle = linGrad;
                // 进度条颜色
                ctx.strokeStyle = color;
                //圆弧两端的样式
                ctx.lineCap = 'round';
        
                //圆弧
                ctx.arc(
                    cx, cy, r,
                    (Math.PI * 2 / 3),
                    (Math.PI * 2 / 3) + endAngle / 100 * (Math.PI * 5 / 3),
                    false
                );
                ctx.stroke();
            }
        
            //刷新
            function loading() {
                if (process >= percent) {
                    clearInterval(circleLoading);
                }
        
                //清除canvas内容
                ctx.clearRect(0, 0, circleX * 2, circleY * 2);
        
                //中间的字
                ctx.font = fontSize + 'px April';
                ctx.textAlign = 'center';
                ctx.textBaseline = 'middle';
                ctx.fillStyle = '#999';
                ctx.fillText(parseFloat(process).toFixed(0) + '%', circleX, circleY);
        
                //圆形
                circle(circleX, circleY, radius);
        
                //圆弧
                sector(circleX, circleY, radius, Math.PI * 2 / 3, process);
                //两端圆点
                smallcircle1(cradius + Math.cos(2 * Math.PI / 360 * 120) * radius, cradius + Math.sin(2 * Math.PI / 360 * 120) *
                    radius, 0);
                smallcircle2(cradius + Math.cos(2 * Math.PI / 360 * (120 + process * 3)) * radius, cradius + Math.sin(2 * Math.PI /
                    360 * (120 + process * 3)) * radius, 2);
                //控制结束时动画的速度
                if (process / percent > 0.90) {
                    process += 0.30;
                } else if (process / percent > 0.80) {
                    process += 0.55;
                } else if (process / percent > 0.70) {
                    process += 0.75;
                } else {
                    process += 1.0;
                }
            }
        
            var process = 0.0; //进度
            var circleLoading = window.setInterval(function() {
                loading();
            }, 20);
        
        }
  • 相关阅读:
    getchar,putchar函数
    强制类型转换和整数常量的数据类型及转换
    c语言整型的隐式数据 类型转换
    c语言整型数据输出格式声明
    c语言整型变量的储存空间,以及所表示的整数范围
    c语言常量
    c语言求回文数
    Android4.0源码目录结构详解
    MTK Android源代码目录
    Comparator 和 Comparable
  • 原文地址:https://www.cnblogs.com/duanyue/p/10476443.html
Copyright © 2020-2023  润新知