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 相关文章推荐
extjs之去除s.gif的影响
Dec 25 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
Jul 26 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
Oct 24 Javascript
Bootstrap 填充Json数据的实例代码
Jan 11 Javascript
js Canvas绘制圆形时钟效果
Feb 17 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
Jan 03 Javascript
Angular17之Angular自定义指令详解
Jan 21 Javascript
使用use注册Vue全局组件和全局指令的方法
Mar 08 Javascript
react-router 路由切换动画的实现示例
Dec 03 Javascript
浅谈JavaScript 代码简洁之道
Jan 09 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
Jan 19 Javascript
js实现简单的倒计时
Jan 28 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下实现折线图效果的代码
2007/04/28 PHP
ZF等常用php框架中存在的问题
2008/01/10 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
Python字符串格式化的方法(两种)
2017/09/19 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Django多数据库联用实现方法解析
2020/11/12 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
写出一个方法实现冒泡排序
2016/07/08 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
信息管理专业学生自荐信格式
2013/09/22 职场文书
教师实习自我鉴定
2013/12/18 职场文书
信访工作经验交流材料
2014/05/23 职场文书
医药销售自我评价200字
2014/09/11 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
怎样写离婚协议书
2015/01/26 职场文书
vue使用element-ui按需引入
2022/05/20 Vue.js