前端 环形统计_用Canvas+js 实现简单圆形百分比统计图表
示例效果图如下:
1、先来制作简单HTML代码结构:
2、再是CSS样式代码:
body {
margin: 0;
padding: 50px 0;
background-color: #444;
}
ul,li {
list-style: none;
margin: 0;
padding: 0;
}
ul li {
float: left;
width: 33%;
text-align: center;
}
3、具体JS代码实现+注释如下:
function drawCircle(_options){
var options = _options || {}; //获取或定义options对象;
options.angle = options.angle || 1; //定义默认角度1为360度(角度范围 0-1);
options.color = options.color || '#fff'; //定义默认颜色(包括字体和边框颜色);
options.lineWidth = options.lineWidth || 10; //定义默认圆描边的宽度;
options.lineCap = options.lineCap || 'square'; //定义描边的样式,默认为直角边,round 为圆角
var oBoxOne = document.getElementById(options.id);
var sCenter = oBoxOne.width / 2; //获取canvas元素的中心点;
var ctx = oBoxOne.getContext('2d');
var nBegin = Math.PI / 2; //定义起始角度;
var nEnd = Math.PI * 2; //定义结束角度;
var grd = ctx.createLinearGradient(0, 0, oBoxOne.width, 0); //grd定义为描边渐变样式;
grd.addColorStop(0, 'red');
grd.addColorStop(0.5, 'yellow');
grd.addColorStop(1, 'green');
ctx.textAlign = 'center'; //定义字体居中;
ctx.font = 'normal normal bold 20px Arial'; //定义字体加粗大小字体样式;
ctx.fillStyle = options.color == 'grd' ? grd : options.color; //判断文字填充样式为颜色,还是渐变色;
ctx.fillText((options.angle * 100) + '%', sCenter, sCenter); //设置填充文字;
/*ctx.strokeStyle = grd; //设置描边样式为渐变色;
ctx.strokeText((options.angle * 100) + '%', sCenter, sCenter); //设置描边文字(即镂空文字);*/
ctx.lineCap = options.lineCap;
ctx.strokeStyle = options.color == 'grd' ? grd : options.color;
ctx.lineWidth = options.lineWidth;
ctx.beginPath(); //设置起始路径,这段绘制360度背景;
ctx.strokeStyle = '#D8D8D8';
ctx.arc(sCenter, sCenter, (sCenter - options.lineWidth), -nBegin, nEnd, false);
ctx.stroke();
var imd = ctx.getImageData(0, 0, 240, 240);
function draw(current) { //该函数实现角度绘制;
ctx.putImageData(imd, 0, 0);
ctx.beginPath();
ctx.strokeStyle = options.color == 'grd' ? grd : options.color;
ctx.arc(sCenter, sCenter, (sCenter - options.lineWidth), -nBegin, (nEnd * current) - nBegin, false);
ctx.stroke();
}
var t = 0;
var timer = null;
function loadCanvas(angle) { //该函数循环绘制指定角度,实现加载动画;
timer = setInterval(function(){
if (t > angle) {
draw(options.angle);
clearInterval(timer);
}else{
draw(t);
t += 0.02;
}
}, 20);
}
loadCanvas(options.angle); //载入百度比角度 0-1 范围;
timer = null;
}
4、代码已封装成函数,除了ID是必填选项,其它都可不填,使用默认值,展示三种调用方法如下:
drawCircle({
id:'one',
color:'#0000ff',
angle:0.5,
lineWidth:5});
drawCircle({
id:'two',
angle:0.75,
color:'#ff0000',
lineWidth:12});
drawCircle({
id:'three',
angle:1,
lineWidth:15,
color:'grd'});
注:还可以在此基础上加强扩展功能,如:设定宽高,多种展示样式等!
前端 环形统计_用Canvas+js 实现简单圆形百分比统计图表相关推荐
- canvas+js实现简单的数字华容道小游戏
数字华容道是个很简单的小游戏,今天就尝试使用canvas+js做个简单的数字华容道小游戏.有关于游戏的具体规则请上网查阅. 一如既往先写个html页面,这里我把游戏的界面水平居中了,这里预留了一个动画 ...
- 前端 环形统计_10款jQuery实现的环形百分比图表插件
1.jQuery实现的环形百分比图表插件 这是一款非常富有创意的jQuery图表插件特效源码,这款jQuery环形百分比图表插件有以下特点:1.图表外观是环形的,因此也十分特别.2.图表数据有百分比显 ...
- vue实现搜索框搜索新增_基于Vue.js实现简单搜索框
主要用到的知识很简单,简单的vuejs2.0的知识就够了.源码用了.vue构建和ES6,用了webpack打包等等.我资历还浅,先用一个简单的.js的写. 先看效果 这里有两个组件,一个组件是logo ...
- canvas+js实现简单的双人坦克对战小游戏
相信有很多人对坦克大战的游戏模仿很有兴趣,在实现经典的坦克大战之前,我先写了个双人的坦克对战,实现了基本的对战功能.下面就开始介绍游戏的编写. 首先创建一个基本的html文件,添加canvas标签以实 ...
- canvas+js实现简单的坦克大战小游戏
使用canvas和js实现经典的坦克大战并不难,坦克和炮弹的绘制可以使用canvas的里API画出,而坦克的移动和炮弹的发射可以依赖于键盘事件和定时器来实现. 在这里我要实现的坦克大战是双人模式,有木 ...
- new 实例化对象是啥意思_前端经典面试题解密:JS的new关键字都干了什么?
写在前面: new关键字在实例化获取对象时都做了什么?是一道经常出现在前端面试时的问题.如果只是简单的了解new关键字是实例化构造函数获取对象,是万万不能够的.更深入的层级发生了什么呢?同时面试官想从 ...
- 前端图片压缩上传(纯js的质量压缩,非长宽压缩)
前端图片压缩上传(纯js的质量压缩,非长宽压缩) 此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下: <!DOCTYPE html> ...
- 【前端】【cornerstone】cornerstone.js如何编辑图像/加载已有图像数据(以画直线为例)
[前端][cornerstone]cornerstone.js如何编辑图像/加载已有图像数据(以画直线为例) 首次加载图像 加载已有图像 部分参考博客:<cornerstone.js 使用总结& ...
- 2020前端最新面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)(3年前端菜鸟级开发师含泪总结)
2020前端最新面试题总结(js.html.小程序.React.ES6.Vue.算法.全栈热门视频资源) 文档描述 (今年确实挺难 3年前端菜鸟级开发师含泪总结 希望能帮助大家) 本文是关注微信小程序 ...
- 前端HTML5视频_谷粒音乐实战-张晓飞-专题视频课程
前端HTML5视频_谷粒音乐实战-385人已学习 课程介绍 谷粒音乐是使用WEB技术(HTML.JavaScript.CSS)直接构建的移动端APP.本套视频深入移动端开发的核心部分. ...
最新文章
- 【JavaSE】day03_Date、SimpleDateFormat、Calendar、Collection
- 机器学习基础知识详解!
- JAVA大文件上传断点续传解决方案
- POJ3264 【RMQ基础题—ST-线段树】
- b站电脑客户端_B站(哔哩哔哩) 视频批量下载工具#电脑版##更新
- 走迷宫问题 算法竞赛入门经典
- 律师总结二手房买卖中的八大陷阱
- 毕向东的Java基础视频教程的学习,作为java基础的基础学习视频
- 性能监视器 Performance Monitor-对SQLSERVER进行性能监控
- Diamond软件的使用--(1)软件安装及配置
- 使用 Golang 实现简易的令牌桶算法
- 使用Visual Studio编译Geos
- 萌新扫盲2—双绞线的“一百米诅咒”
- 诗歌十 寒窑赋(破窑赋)天有不测风云,人有旦夕祸福
- linux wifi 8192移植 及部分wifi工具的使用
- MyBatisCodeHelper-Pro插件
- 十个Mac端设计软件
- 安卓8.0 android系统,谷歌安卓8.0重磅来袭!国产定制系统有必要马上适配吗?
- 安装centOS 7双系统(四)——解决Broadcom博通BCM 43xx无线网卡驱动问题
- 浏览器查看cookie过期时间