js canvas实现适用于移动端的百分比仪表盘dashboard


Posted in Javascript onJuly 18, 2017

本文为大家分享了canvas实现适用于移动端的百分比仪表盘,供大家参考,具体内容如下

由于最近工作中,经常会遇到一些动态百分比的仪表盘,一开始都是用图片样式方式实现;

但是随着越来越多的项目,决定用canvas绘制一个简易的仪表盘,便于以后项目中直接使用;

现版本只是书写为方法形式,也许之后会有时间对其优化为插件形式。

简简单单而已,以下直接给出代码和执行过程中的三张截图:

<!doctype html> 
<html lang="en"> 
<head> 
  <meta charset="utf-8"> 
  <meta http-equiv="Pragma" content="no-cache"> 
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/> 
  <meta name="format-detection" content="telephone=no"/> 
  <meta name="apple-mobile-web-app-capable" content="yes"/> 
  <meta name="apple-mobile-web-app-status-bar-style" content="black"/> 
  <title>canvas绘制简易百分比仪表盘dashboard(建议最好用于移动端)</title> 
  <style type="text/css"> 
    div{margin:1rem;background:#eee;padding:.3rem; position:relative } 
    div canvas{background:#cacaca; 
      -webkit-transform: rotateZ(-270deg); 
      transform:rotateZ(-270deg); 
      -webkit-animation:ani01 1s ease 0s both; 
      animation:ani01 1s ease 0s both; 
    } 
 
    @-webkit-keyframes ani01 { 
      0%{ 
        -webkit-transform:scale(.5,.5) rotateZ(-270deg); 
        transform:scale(.5,.5) rotateZ(-270deg); 
      } 
      100%{ 
        -webkit-transform:scale(1,1) rotateZ(-90deg); 
        transform:scale(1,1) rotateZ(-90deg); 
      } 
    } 
    @keyframes ani01 { 
      0%{ 
        -webkit-transform:scale(.5,.5) rotateZ(-270deg); 
        transform:scale(.5,.5) rotateZ(-270deg); 
      } 
      100%{ 
        -webkit-transform:scale(1,1) rotateZ(-90deg); 
        transform:scale(1,1) rotateZ(-90deg); 
      } 
    } 
  </style> 
</head> 
<body> 
 
<div> 
  <canvas id="myCanvas1" data-percent="80"> 
    您的浏览器不支持canvas标签。 
  </canvas> 
  <span style="display:block;position:absolute;top:.94rem;left:.3rem;width:2rem;text-align:center;font-size:.5rem;font-family:microsoft Yahei" id="dushu" >0</span> 
</div> 
 
<script type="text/javascript" src="../js/flexible.js"></script> 
<script type="text/javascript"> 
  var pper=0; 
  var pper_interal; 
  var dushu=document.getElementById('dushu'); 
 
  var aaa=drawCanvanPercent('myCanvas1','rem',2,'#0e9cfa',0.2,'#fff'); 
 
  function drawCanvanPercent(ele_id,dw,cir_r,cir_color,line_w,fill_color){ 
    if(dw=="rem"){ 
      cir_r=cir_r*(window.screen.width/10); 
      line_w=line_w*(window.screen.width/10); 
    } 
    var canvas = document.getElementById(ele_id); 
    var circle = { 
      r : cir_r/2,   //圆的半径 
      per : canvas.getAttribute('data-percent'),   //百分比分子 
      color : cir_color,   //圆的颜色 
      lineWidth : line_w   //圆的颜色 
    }; 
    canvas.width=canvas.height=circle.r*2; 
    canvas.style.borderRadius="50%"; 
    if(canvas.getContext){ 
      var ctx2 = canvas.getContext("2d"); 
      ctx2.fillStyle = fill_color; 
      ctx2.arc(circle.r, circle.r, circle.r-circle.lineWidth/2, 0, Math.PI*2, false); 
      ctx2.fill(); 
      var ctx = canvas.getContext("2d"); 
      pper_interal= setInterval(function () { 
        drawMove(ctx,circle); 
      }, 10); 
    } 
  } 
 
  function drawMove(ctx,circle){ 
    if(pper>=circle.per){ 
      pper=circle.per; 
      clearTimeout(pper_interal); 
    }else{ 
      pper++; 
    } 
    dushu.innerText=pper+'%'; 
    ctx.beginPath(); 
    ctx.strokeStyle = circle.color; 
    ctx.lineWidth=circle.lineWidth; 
    ctx.arc(circle.r, circle.r, circle.r, 0, Math.PI*(pper/100)*360/180, false); 
    ctx.stroke(); 
  } 
  </script> 
 
</body> 
</html>

截图如下:

js canvas实现适用于移动端的百分比仪表盘dashboard

js canvas实现适用于移动端的百分比仪表盘dashboard

js canvas实现适用于移动端的百分比仪表盘dashboard

建议:不要因为简单而不去动手,多动手多思考,你会进步的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 使用手册(一)
Sep 23 Javascript
node.js中的buffer.slice方法使用说明
Dec 10 Javascript
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
基于javascript实现页面加载loading效果
Sep 15 Javascript
jquery中validate与form插件提交的方式小结
Mar 26 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
Jun 13 Javascript
快速解决js中window.location.href不工作的问题
Nov 02 Javascript
javascript实现简易计算器
Feb 01 Javascript
ReactNative 之FlatList使用及踩坑封装总结
Nov 29 Javascript
Vue 获取数组键名的方法
Jun 21 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 Javascript
Vue实现数据表格合并列rowspan效果
Nov 30 Javascript
vue深入解析之render function code详解
Jul 18 #Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
Jul 18 #jQuery
浅谈JS封闭函数、闭包、内置对象
Jul 18 #Javascript
iscroll实现下拉刷新功能
Jul 18 #Javascript
vue.js实现单选框、复选框和下拉框示例
Jul 18 #Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 #Javascript
iscroll.js滚动加载实例详解
Jul 18 #Javascript
You might like
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
Python struct.unpack
2008/09/06 Python
python实现文件名批量替换和内容替换
2014/03/20 Python
Python、Javascript中的闭包比较
2015/02/04 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
彻底解决Python包下载慢问题
2020/11/15 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
一年级数学教学反思
2014/02/01 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
教师节标语大全
2014/10/07 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript