使用canvas做一个圆形进度条

1.html部分

                <div class="circleProgress_wrapper">
                    <canvas class="process" width="200px" height="200px">0%</canvas>

                    <div id="increase" class="add iconfont">&#xe619;</div>
                    <div id="reduce" class="cut iconfont">&#xe614;</div>

                </div>

 

 

2.js部分

$(document).ready(function() {

                $('canvas.process').text(16 + "℃");
                drawProcess1(0.3, 2.18, 200, 200, 15)

                $("#increase").click(function() {
                    var process = $('canvas.process').text();
                    process = parseInt(process) + 1;

                    //addNum(30,100);

                    if(process > 30) {
                        return;
                    }
                    var str = getformat(process);
                    var start = str[0];
                    var end = str[1];
                    $('canvas.process').text(process + "℃");
                    drawProcess1(start, end, 200, 200, 15); //参数分别是,开始弧度,结束弧度,画布高、宽、圆环粗细。

                });
                $("#reduce").click(function() {
                    var process = $('canvas.process').text();
                    process = parseInt(process) - 1;
                    //addNum(30,100);

                    if(process < 16) {
                        return;
                    }
                    var str = getformat(process);
                    var start = str[0];
                    var end = str[1];
                    $('canvas.process').text(process + "℃");
                    drawProcess1(start, end, 200, 200, 15);

                })

                function drawProcess1(start, end, h, w, weight) {

                    $('canvas.process').each(function() {
                        var text = $(this).text();

                        var process = text.substring(0, text.length - 1);

                        //alert(process);
                        var canvas = this;
                        var context = canvas.getContext('2d');
                        context.clearRect(0, 0, h, w);

                        //环背景色,基础背景
                        context.beginPath();
                        context.moveTo(h / 2, w / 2);
                        context.arc(h / 2, w / 2, h / 2, 0.3 * Math.PI, 0.7 * Math.PI, true);
                        context.closePath();

                        context.fillStyle = '#ddd';
                        context.fill();

                        //环前景色渐变色
                        context.beginPath();
                        context.moveTo(h / 2, w / 2);
                        context.arc(h / 2, w / 2, h / 2, start * Math.PI, end * Math.PI, true);

                        context.closePath();
                        var lGrd = context.createLinearGradient(0, 0, 300, 300);
                        lGrd.addColorStop(0, '#ff0000');
                        lGrd.addColorStop(1, '#0000ff');
                        context.fillStyle = lGrd;
                        context.fill();

                        //设置内圆透明
                        context.beginPath();
                        //context.moveTo(h / 2, w / 2);
                        context.arc(h / 2, w / 2, h / 2 - weight, 0.3 * Math.PI, 0.7 * Math.PI, true);

                        context.closePath();
                        var lGrds = context.createLinearGradient(0, 0, 300, 300);
                        lGrds.addColorStop(0, '#2f96fb');
                        lGrds.addColorStop(1, '#2fbdf6');
                        context.fillStyle = lGrds;
                        //context.fillStyle = '#2f96fb';

                        context.fill();

                        //设置内环边框跟百分度
                        context.beginPath();
                        context.arc(h / 2, w / 2, h / 2 - weight, 0 * Math.PI, 0 * Math.PI, true);
                        context.closePath();
                        context.strokeStyle = '#ddd';
                        context.stroke();
                        context.font = "bold 16pt Arial";
                        context.fillStyle = '#FFFFFF';
                        context.textAlign = 'center';
                        context.textBaseline = 'middle';
                        context.moveTo(h / 2, w / 2);
                        context.fillText(text, h / 2, w / 2);
                    });
                }

                function getformat(number) {

                    if(number == 16) {
                        return ["0.3", "2.18"]
                    } else if(number == 17) {
                        return ["0.3", "2.1"]
                    } else if(number == 18) {
                        return ["0.3", "2.0"]
                    } else if(number == 19) {
                        return ["0.3", "1.9"]
                    } else if(number == 20) {
                        return ["0.3", "1.8"]
                    } else if(number == 21) {
                        return ["0.3", "1.7"]
                    } else if(number == 22) {
                        return ["0.3", "1.6"]
                    } else if(number == 23) {
                        return ["0.3", "1.5"]
                    } else if(number == 24) {
                        return ["0.3", "1.4"]
                    } else if(number == 25) {
                        return ["0.3", "1.3"]
                    } else if(number == 26) {
                        return ["0.3", "1.23"]
                    } else if(number == 27) {
                        return ["0.3", "1.099"]
                    } else if(number == 28) {
                        return ["0.3", "0.966"]
                    } else if(number == 29) {
                        return ["0.3", "0.83"]
                    } else if(number == 30) {
                        return ["0.3", "0.7"]
                    }
                }

            });

3.效果图

这就OK了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值