吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4460|回复: 6
收起左侧

[其他转载] 【分享】H5 canvas 饼形数据图beta

[复制链接]
弱弱的小粥粥 发表于 2016-10-20 21:54
本帖最后由 弱弱的小粥粥 于 2016-10-21 10:10 编辑

今天在Excel上看到一个饼状图,饼状图可以很直观的看出各数据的组成,我就想着能不能在H5画布上画出来!
于是乎,楼主这次写了一个 饼形数据图,纯天然,绝对不添加任何"防腐剂";
完全是楼主 兴致所至所写 ,可能会有更简便的方法,还望前辈们指点迷津!
PS:
函数已经大致封装好!可以改变各部分的颜色大小,percent数组填写的是各部分角度,mycolor数组填写的是
各部分颜色;
后面由详细的注释

Video_2016-10-20_214424.gif
[HTML] 纯文本查看 复制代码
<!DOCTYPE html>
<html>
        <head>
                <meta charset="utf-8" />
                <title></title>
        <style type="text/css">
            body{
                margin: 0px;
            }
        </style>
        </head>
        <body>
                
        </body>
</html>

[JavaScript] 纯文本查看 复制代码
<script type="text/javascript" language="javascript">
window.onload=function () {
    // 创建画布
    var canvas=document.createElement('canvas');
        canvas.style.border="2px solid #aaaaaa";
        canvas.width=700;
        canvas.height=700;
        var brush=canvas.getContext("2d");

    // 包裹画布居中
    var box=document.createElement('div');
        // box样式
        box.style.width=canvas.width+"px";
        box.style.height=canvas.height+"px";
        box.style.margin="100px auto";

    // 移动块
    var move=document.createElement('span');
        // move样式
        move.style.color="#ff0000";
        move.style.position="absolute";
        move.style.display="none";
        move.style.boxShadow="1px 1px 8px red";

    // 添加对象
    document.body.appendChild(box);
    document.body.appendChild(move);
    box.appendChild(canvas);

        // 避免重复获取画布大小
        var x=canvas.offsetLeft;
        var y=canvas.offsetTop;

    function mymove (event) {
        move.style.display="block";
        move.style.left=event.pageX-50+"px";
        move.style.top=event.pageY-50+"px";
        move.innerHTML="当前画布坐标:"+(event.clientX-x-2)+","+(event.clientY-y-2);
    }

    function myout () {
        move.style.display="none";
    }

    canvas.onmousemove=mymove;
    canvas.onmouseout=myout;

// ----------------------------------------------------------
	
	brush.translate(350,350);//定点圆心
	
	var mycolor=["#FF0000","#FF7F00","#FFFF00","#00FF00","#00FFFF","#0000FF"];//设置圆环各块颜色
	var percent=[20,30,50,70,120,70];//设置圆环各块所占角度,也可以自行转行成百分比
	var big_arc_r=300;//设置圆环大圆半径
	var small_arc_r=100;//设置圆环小圆半径
	var myDeg=-90;//设置初始旋转角度
	var i=0;
	function ring() {
		if (i<percent.length) {
			brush.save();
			brush.rotate(Math.PI/180*myDeg);//圆环旋转
			brush.beginPath();
			brush.fillStyle=mycolor[i];//填充颜色
			brush.arc(0,0,small_arc_r,Math.PI/180*percent[i],0,true);//逆时针画小圆弧
			brush.arc(0,0,big_arc_r,0,Math.PI/180*percent[i],false);//顺时针画大圆弧
			brush.fill();
			brush.restore();
			myDeg+=percent[i];//储存下一次需要旋转的角度
			i++;
		}else{
			clearInterval(timer)
		}
	}
	timer=setInterval(ring,100);
}
</script>

话不多说!只求分享!不求点赞

免费评分

参与人数 2热心值 +2 收起 理由
sgyz520 + 1 已答复!
ablack + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ablack 发表于 2016-10-20 22:16
虽然看着不是很高大上,但是写代码也是比较辛苦的
sgyz520 发表于 2016-10-20 23:36
psx1lin 发表于 2016-10-23 12:40
哦是酱紫 发表于 2016-11-13 10:01
h5还可以这么玩。  
五脊六兽 发表于 2016-11-13 17:17
复制下来代码研究研究~谢楼主~
Sheng667 发表于 2016-11-14 00:24 来自手机
楼主辛苦啦
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 13:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表