• Canvas实现环形进度条


    Canvas实现环形进度条

    直接上代码:

    <canvas width="200" height="200" >60%</canvas>
    <canvas width="200" height="200" >20%</canvas>
    <canvas width="200" height="200" >50%</canvas>

    JS:

       window.onload = function() {
           var options = [                                      //存储颜色数组
               {"color1": "#00ff00", "color2": "#db4c3d"},
               {"color1": "#669900", "color2": "#3faeca"},
               {"color1": "#b34d00", "color2": "#4db07c"}
           ];
           var canvas = document.getElementsByTagName("canvas");
           for(var i=0;i<canvas.length;i++) {
               var that = canvas[i];
               var text = that.innerHTML;
               var number=text.substring(0,text.length-1);
               var ctx = that.getContext("2d");

    //画最下面灰色的圆 ctx.clearRect(
    0, 0, 200, 200); ctx.beginPath(); ctx.moveTo(100,100); ctx.arc(100, 100, 100, 0, 2 * Math.PI, false); ctx.closePath(); ctx.fillStyle = "#ccc"; ctx.fill(); //画扇形 ctx.beginPath(); ctx.moveTo(100, 100); ctx.arc(100, 100, 100, 0, 2 * Math.PI * number / 100, false); ctx.closePath(); ctx.fillStyle = options[i].color1; ctx.fill(); //环形内部的填充 ctx.beginPath(); ctx.moveTo(100, 100); ctx.arc(100, 100, 80, 0, 2 * Math.PI, false); ctx.fillStyle = "#fff"; ctx.fill(); //中间圆 ctx.beginPath(); ctx.moveTo(100, 100); ctx.arc(100, 100, 60, 0, 2 * Math.PI, false); ctx.fillStyle = options[i].color2; ctx.fill(); //填充字体 ctx.font = "30px Arial"; ctx.fillStyle = '#fff'; ctx.fillText(text, 70, 110); }
    }

    效果图:

    很明显起始角不合适

    改进如下:

    补充:因为在IE下canvas不兼容,使用插件excanvas.js,,excanvas.js实现了大部分canvas的API,在绘图方面其核心是通过IE的VML去实现的,利用IE支持的VML对象来模拟Canvas的绘图的。但是还成存在以下缺陷:在速度上与chrome、firefox、safari浏览器相距甚远。也尝试过用其他方式解决IE问题;方法2种,

    第一种:通过判断<dd>标签的数字大小,分为两种,大于50,小于50;而改变dt的宽高;

    <div class="canvas">
        <dl class="every_canvas">
            <dt><img src="2.png" alt=""/></dt>
            <dd>60%</dd>
        </dl>
        <dl class="every_canvas">
            <dt><img src="2.png" alt=""/></dt>
            <dd>30%</dd>
        </dl>
        <dl class="every_canvas">
            <dt><img src="2.png" alt=""/></dt>
            <dd>80%</dd>
        </dl>
    </div>
    
    
    <style>
    dl,dt,dd{
            margin:0;padding:0;list-style:none;
        }
       .every_canvas{
           width:110px;height:110px;float:left;background:url('1.png');margin-right:20px;
           position:relative;overflow:hidden;
       }
        .every_canvas dt{
            width:0px;height:0px;position:absolute;left:0;top:0;overflow:hidden;
        }
       .every_canvas dd{
           width:63px;height:63px;position:absolute;left:23px;top:23px;background:url('3.png')
       }
    </style>

    js:

    if (!document.getElementById("canvas").getContext){            //IE浏览器
               $('.every_canvas').each(function(index){            //循环每一个dl
                    var that=$(this);
                    var text=that.find('dd').text();       
                    var number=text.substring(0,text.length-1);     //去掉%
                    if(number>50){
                       that.find('dt').css({
                           "height":"110px",
                           "width":100*number/110+"px"
                       })
                    }else{
                        that.find('dt').css({
                            "height":100*number/110+"px",
                            "width":100*number/110+"px"
                        })
                    }
                })
     }else{

    }

    效果图:

       环形太直,,太僵硬

    第二种:就是在ps里面,把100%的环形,做10%、20%、30%、40%、50%、60%、70%、80%、90%、出来,js把number分成10类,判断数值,选择不一样的图片。繁琐!

  • 相关阅读:
    微软Office团队做产品的十大经验教训 沧海
    Definitio of Business Intelligence 沧海
    爱购家园,轻松工作,轻松生活 沧海
    SAAS概述 沧海
    一定要做自己最内行的东西,一定要在自己本身的职位上来提升自己 沧海
    Android应用的构成 沧海
    管理的最高境界,就是激发每个员工的潜力。让每个员工都觉得自己的工作是一份事业。 沧海
    The life cycle of a typical project 一个典型的项目生命周期 沧海
    印度英语的特点归纳 沧海
    3G时代的移动业务赢利模式分析 沧海
  • 原文地址:https://www.cnblogs.com/yongyang/p/9230508.html
Copyright © 2020-2023  润新知