实现环形百分比

最近研究了下环形百分图如何用前端实现的,查了资料总结了以下2种方法,用多层div和canvas,

实例地址:http://play.163.com/special/tese-circle/

一:用多层div实现

需要三个层绝对定位,当中的2个层分别用clip盖住左边和右边,控制旋转角度,漏出最底部有颜色的环实现,附上代码:

.circle {width: 200px;height: 200px;position: relative;border-radius: 50%;background: #00b0f0;}
    .pie_left, .pie_right {width: 200px;height: 200px;position: absolute;top: 0;left: 0;}
    .left, .right {display: block;width:200px; height:200px;background:#bfbfbf;border-radius: 50%;position: absolute;top: 0;left: 0;}
    .pie_right , .right{clip:rect(0,auto,auto,100px);}
    .pie_left, .left {clip:rect(0,100px,auto,0);}
    .mask {width: 150px;height: 150px;border-radius: 50%;left: 25px;top: 25px;background: #FFF;position: absolute;text-align: center;line-height: 150px;font-size: 20px;font-weight: bold;}

<div class="circle"  data-num="25">
        <div class="pie_left">
            <div class="left"></div>
        </div>
        <div class="pie_right">
            <div class="right"></div>
        </div>
        <div class="mask">
            <span>25</span>
            %
        </div>
    </div>
function showCircle(){
            $(‘.circle‘).each(function(index, el) {
                var num = $(this).find(‘span‘).text() * 3.6;
                if (num<=180) {
                    $(this).find(‘.right‘).css(‘transform‘, "rotate(" + num + "deg)");
                } else {
                    $(this).find(‘.right‘).css(‘transform‘, "rotate(180deg)");
                    $(this).find(‘.left‘).css(‘transform‘, "rotate(" + (num - 180) + "deg)");
                };
            });
        }

二:用canvas实现

<div class="circular" data-percent="25">
            <canvas class="cvs" width="60" height="60"></canvas>
            <span class="num">25</span>
        </div>

function drawcanvas(){
    $(‘.circular‘).each(function(index, el) {
        var p = $(el).attr(‘data-percent‘);
        var angle = Math.PI*2*(p/100)-Math.PI/2;
        var cvs = $(el).find(‘.cvs‘);
        var cxt=cvs[0].getContext("2d");

        cxt.lineWidth=5;
        cxt.strokeStyle="green";
        cxt.beginPath();
        cxt.arc(30,30,20,-Math.PI/2,angle,false);//顺时针,默认从3点钟方向开始
        cxt.stroke();//画空心圆
    })
}

参考网址:

网上插件:

网上插件:easypiechart.js

canvas  : http://www.365mini.com/page/html5-canvas-circle.htm

div :http://codepen.io/anon/pen/JXqNvW

时间: 2024-12-15 05:55:44

实现环形百分比的相关文章

好用的的环形百分比动画效果

var p1 = new Progress({     el: 'my_html', //canvas元素id     deg: 100, //绘制角度     timer: 8, //绘制时间     lineWidth: 5, //线宽     lineBgColor: '#BBBBBB', //底圆颜色     lineColor: 'white', //动态圆颜色     textColor: '#BBBBBB', //文本颜色     fontSize: 22, //字体大小     

8个经典炫酷的HTML5 Canvas动画欣赏

HTML5非常强大,尤其是Canvas技术的应用,让HTML5几乎可以完成所有Flash能完成的效果.本文精选了8个经典炫酷的HTML5 Canvas动画欣赏,每一个都提供全部的源代码,希望对你有所帮助. 1.HTML5 Canvas可拖动的弹性大树摇摆动画 今天让我们继续来分享一个炫酷的HTML5动画,它是一款基于HTML5 Canvas的大树摇摆动画,这款HTML5动画的特点是我们可以拖拽树枝,从而让整棵树摇摆起来,这样就真实地模拟了大树从摇摆到静止的整个过程,相当逼真. 在线演示     

7个华丽的基于Canvas的HTML5动画

说起HTML5,可能让你印象更深的是其基于Canvas的动画特效,虽然Canvas在HTML5中的应用并不全都是动画制作,但其动画效果确实让人震惊.本文收集了7个最让人难忘的HTML5 Canvas动画,包括画板.文字.图表等,希望你会喜欢. 1.HTML5 Canvas画板画图工具 可定义笔刷和画布 HTML5 Canvas还有一个比较实用的应用,那就是网络画板,这样我们就可以在网页上直接进行画图操作.今天要分享的这款HTML5 Canvas画图工具就可以简单实现网络画图的功能,我们可以自定义

Qt编写数据可视化大屏界面电子看板3-新建布局

一.前言 能够新建布局,也是数据可视化大屏界面电子看板系统中的必备功能之一,新建布局这样的功能一般做到右键菜单中,单击新建布局菜单,弹出输入框要求输入新的布局的名称,为了更符合国情,直接支持中文名称,保存成配置文件直接中文名称命名,这样方便用户理解,Qt5以来对乱码的问题解决的就比较好了,不像Qt4时代稍不留神就乱码了,Qt5只要保证源码文件utf-8编码基本上就很少遇到乱码问题了.新建布局必须要有个默认的窗体排列,Qt中的dock窗体,默认布局会以窗体的sizehint作为大小参照标准,也不一

Qt编写数据可视化大屏界面电子看板4-布局另存

一.前言 布局另存是数据可视化大屏界面电子看板系统中的额外功能之一,主要用于有时候用户需要在现有布局上做个微调,然后直接将该布局另存为一个布局配置文件使用,可以省略重新新建布局重新来一次大的调整的工作,此功能主要是用到了配置文件的保存,另存为一个不同名字的配置文件即可,属于非常简单的功能,在代码上来讲,其实Qt的配置文件类QSettings使用起来不要太方便,不仅支持WIN的注册表的读取写入,还支持跨平台的INI文件,说白了其实就是个文本文件,个人比较喜欢用INI文件作为配置文件,这样一方面跨平

【android】环形进度条实现

先上效果图(压缩尺寸后出现锯齿,原图边缘很细腻的喂~) 特性: 1:支持环形带字 .环形不带字(中间盖上圆形图片,实现天天动听播放器在通知栏播放进度的效果).实心 2:线程安全,不需要写handler来改变UI 3:自定义大小.颜色.边框粗细 代码来源于网上,并在此基础上加以修改 思路如下,创建一个View的子类,在OnDraw方法里面 1:第一次绘画,画出圆形背景 2:第二次绘画,按照百分比画出弧形进度() 如果现实文字,则居中画出文字. 幸运的是canvas对象已经给我们提供了绘制各种形状的

HTML5 canvas绘制倒计时+环形进度条

需求: 1.页面在进入时后台会提供一个固定时间和固定百分比,例如:18小时16分30秒,25%2.页面要求在进入时,有环形进度条从0推进到25%的效果,进度条旁的显示进度的黄色方块要始终保持跟随进度条最前方如图3.环形进度条中间计时器,要从获取到 具体时间后开始倒计时 设计图: JS代码如下: //补零function setDigit(num, n){ var str=''+num; if(str.length<n) { str='0'+str; } return str;}//设定时间fun

自定义环形进度条

自定义环形进度条 效果图: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 package com.qiao.circleprogress_forexample; import android.app.Activity; impo

使用canvas编写环形图.

原理使用canvas画图: 第一步:画一个大圆 第二部:画一个扇形 第三部:画一个小圆 相互叠加. 最终效果: 现在上代码: (function($){ $.fn.drawPic=function(opts){ var defaults={ canvasbj:"white",//画布背景 canvasWidth:50, canvasHeight:50, bigBg:"red",//大圆背景 bigRadius:50,//大圆半径 ringColor:"ye