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 相关文章推荐
javascript 触发事件列表 比较不错
Sep 03 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
Jul 26 Javascript
JQuery对class属性的操作实现按钮开关效果
Oct 11 Javascript
在Firefox下js select标签点击无法弹出
Mar 06 Javascript
JQuery勾选指定name的复选框集合并显示的方法
May 18 Javascript
基于jquery实现表格无刷新分页
Jan 07 Javascript
jquery html动态添加的元素绑定事件详解
May 24 Javascript
JS原型链怎么理解
Jun 27 Javascript
JSON与String互转的实现方法(Javascript)
Sep 27 Javascript
canvas实现动态小球重叠效果
Feb 06 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
Sep 05 Javascript
JavaScript中的this妙用实例分析
May 09 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
PHP 遍历文件实现代码
2011/05/04 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
2016/01/06 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
python3抓取中文网页的方法
2015/07/28 Python
Python tkinter事件高级用法实例
2018/01/31 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
英文翻译的自我评价语句
2013/10/04 职场文书
学生学习总结的自我评价
2013/10/22 职场文书
创业计划书六个要素
2013/12/26 职场文书
党员学习十八大感想
2014/01/17 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
信息员培训方案
2014/06/12 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
500字小学生检讨书
2015/02/19 职场文书
辩论赛新闻稿
2015/07/17 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript