JS+canvas动态绘制饼图的方法示例

这篇文章主要介绍了js+canvas动态绘制饼图的方法,结合具体实例形式分析了js+canvas实现饼状图形绘制的相关操作技巧,对javascript感兴趣的朋友可以参考下本篇文章。

运行效果图如下:

JS+canvas动态绘制饼图的方法示例

完整代码:

nbsp;html>    www.php.cn canvas饼状图  var colors = (function () {    return ( "aliceblue,antiquewhite,aqua,aquamarine,azure,beige,bisque,black,blanchedalmond,blue," +    "blueviolet,brown,burlywood,cadetblue,chartreuse,chocolate,coral,cornflowerblue,cornsilk," +    "crimson,cyan,darkblue,darkcyan,darkgoldenrod,darkgray,darkgreen,darkgrey,darkkhaki,darkmagenta," +    "darkolivegreen,darkorange,darkorchid,darkred,darksalmon,darkseagreen,darkslateblue,darkslategray," +    "darkslategrey,darkturquoise,darkviolet,deeppink,deepskyblue,dimgray,dimgrey,dodgerblue,firebrick," +    "floralwhite,forestgreen,fuchsia,gainsboro,ghostwhite,gold,goldenrod,gray,green,greenyellow,grey," +    "honeydew,hotpink,indianred,indigo,ivory,khaki,lavender,lavenderblush,lawngreen,lemonchiffon," +    "lightblue,lightcoral,lightcyan,lightgoldenrodyellow,lightgray,lightgreen,lightgrey,lightpink," +    "lightsalmon,lightseagreen,lightskyblue,lightslategray,lightslategrey,lightsteelblue,lightyellow," +    "lime,limegreen,linen,magenta,maroon,mediumaquamarine,mediumblue,mediumorchid,mediumpurple," +    "mediumseagreen,mediumslateblue,mediumspringgreen,mediumturquoise,mediumvioletred,midnightblue," +    "mintcream,mistyrose,moccasin,navajowhite,navy,oldlace,olive,olivedrab,orange,orangered,orchid," +    "palegoldenrod,palegreen,paleturquoise,palevioletred,papayawhip,peachpuff,peru,pink,plum,powderblue," +    "purple,rebeccapurple,red,rosybrown,royalblue,saddlebrown,salmon,sandybrown,seagreen,seashell,sienna," +    "silver,skyblue,slateblue,slategray,slategrey,snow,springgreen,steelblue,tan,teal,thistle,transparent," +    "tomato,turquoise,violet,wheat,white,whitesmoke,yellow,yellowgreen" ).split(',');  })();  function Bing(obj) {    this.start = 0;    for(var key in obj){      this[key] = obj[key];    }    this.init();  }  Bing.prototype = {    init: function () {      this.handle();      this.render(this.data2);      this.drawText();    },    /**     * 渲染页面     * @param obj     * @param i     */    render: function (obj) {      //3、计算每一个扇形的起始弧度和结束弧度      this.data2.forEach(function (v, i) {        var obj = {};        //第一个扇形的起始弧度:start 结束:start+第一个扇形占据的弧度差        obj.start = this.start;        obj.end = this.start + v.radian;        this.start += v.radian;        //绘制扇形        this.ctx.beginPath();        this.ctx.moveTo(300, 300);        this.ctx.arc(300, 300, 150, obj.start, obj.end);        this.ctx.fillStyle = colors[i * 15];        this.ctx.fill();      }, this);    },    /**     * 处理数据     */    handle:function(){      var sum = 0;      this.data.forEach(function (v) {        sum += v;      });      //2、计算每一个数据所占的比重      this.data2 = this.data.map(function (v) {        var obj = {};        obj.number = v;        obj.ratio = v / sum;//每个数据占据的比重        obj.radian = 2 * Math.PI * v / sum;//该扇形所占据的弧度        obj.start = this.start;        obj.end = this.start + obj.radian;        this.start = obj.end;        return obj;      },this);    },    drawText:function(){      this.ctx.font = "30px 微软雅黑";      this.ctx.fillStyle = 'red';      this.data2.forEach(function(obj){        //计算文字所在的弧度        r2 = obj.start + obj.radian/2;        //就按相对于圆心文字偏移的位置        b = this.r*Math.cos(r2);        h = this.r*Math.sin(r2);        //文字的位置        var x2 = this.x + b;        var y2 = this.y + h;        this.ctx.fillText(obj.number,x2,y2);      },this);    }  };  var canvas = document.querySelector('canvas');  var ctx = canvas.getContext('2d');  var data = [1, 3, 5, 7, 9];  var bing = new Bing({    ctx:ctx,    x:300,    y:300,    r:150,    data:data  });

登录后复制

以上就是本篇文章的所有内容,希望对大家学习提供到帮助!!

相关推荐:

JavaScript优先队列与循环队列实例详解

JavaScript实现三级级联特效实例分享

JavaScript实现音乐自动切换和轮播实例教程

以上就是JS+canvas动态绘制饼图的方法示例的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2789510.html

(0)
上一篇 2025年3月8日 18:43:51
下一篇 2025年3月6日 09:59:52

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript实现向select下拉框中添加和删除元素实例分享

    本文主要介绍了javascript实现向select下拉框中添加和删除元素的方法,涉及jquery中append()与remove()方法动态操作表单元素的相关技巧,需要的朋友可以参考下,希望能帮助到大家。 本文实例讲述了JavaScrip…

    2025年3月8日
    200
  • 关于jQuery.cookie.js使用方法及相关参数详解

    本文主要和大家分享一个轻量级的cookie 插件用法,可以读取、写入、删除 cookie。这篇文章主要介绍了jquery.cookie.js使用方法及相关参数解释,需要的朋友可以参考下,希望能帮助到大家。 cookie操作需要上传到服务器才…

    编程技术 2025年3月8日
    200
  • jQuery实现MD5加密的简单方法

    本文主要介绍了jquery简单实现md5加密的方法,基于jquery.md5.js插件实现md5加密功能,非常简单实用,需要的朋友可以参考下,希望能帮助到大家。 1、问题背景 有两个输入框,一个输入明文,另一个输入框显示密文 2、实现源码 …

    2025年3月8日
    200
  • JS实现多物体运动实例分享

    本文主要介绍了js实现多物体运动的方法,结合实例形式较为详细的分析了javascript实现多物体运动的原理与相关操作技巧,需要的朋友可以参考下,希望能帮助到大家, 基本步骤 1.通过getElementsByTagName获取到要做多物体…

    2025年3月8日
    200
  • JS运动改变单物体透明度实现方法

    本文主要介绍了js运动改变单物体透明度的方法,结合实例形式分析了页面元素属性动态修改相关操作技巧,需要的朋友可以参考下,希望能帮助到大家 除了通过改变物体的 宽,高,letf,top位置或者是运动方向来实现物体运动效果之外,改变物体的透明度…

    编程技术 2025年3月8日
    200
  • JS实现多物体运动的方法详解

    这篇文章主要介绍了js实现多物体运动的方法,结合实例形式较为详细的分析了javascript实现多物体运动的原理与相关操作技巧,对javascript感兴趣的朋友可以参考下本篇文章 本文实例分析了JS实现多物体运动的方法。分享给大家供大家参…

    2025年3月8日
    200
  • JS实现拖拽改变物体大小

    拖拽改变物体大小,本文主要介绍了js实现基于拖拽改变物体大小的方法,涉及javascript事件响应及页面元素属性动态操作相关实现技巧,需要的朋友可以参考下,希望能帮助到大家。 本文实例讲述了JS实现基于拖拽改变物体大小的方法。分享给大家供…

    2025年3月8日
    200
  • JS点击下拉菜单把选择的内容同步到input输入框内实现方法

    本文主要为大家分享一篇js实现点击下拉菜单把选择的内容同步到input输入框内的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 最近博主在边学flask边写测试平台,碰到一个比较常用的场景如下图所示…

    2025年3月8日
    200
  • JS运动改变单物体透明度的方法分析

    这篇文章主要介绍了js运动改变单物体透明度的方法,结合实例形式分析了页面元素属性动态修改相关js操作技巧,对javascript感兴趣的朋友可以参考下本篇文章 除了通过改变物体的 宽,高,letf,top位置或者是运动方向来实现物体运动效果…

    编程技术 2025年3月8日
    200
  • parcel.js打包出错到选择nvm的全部过程解析

    本文主要介绍了从parcel.js打包出错到选择nvm的全部过程,需要的朋友可以参考下,希望大家能帮助大家了解parcel.js打包出错到选择nvm的全部过程。 遇到问题 我在使用parcel.js打包项目的时候出现了下面的错误: 我在仔细…

    2025年3月8日
    200

发表回复

登录后才能评论