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点击tr实现checkbox选中的方法
Mar 19 Javascript
js如何判断用户是在PC端和还是移动端访问
Apr 24 Javascript
jQuery的deferred对象详解
Nov 12 Javascript
jquery实现网页的页面平滑滚动效果代码
Nov 02 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
Nov 25 Javascript
js print打印网页指定区域内容的简单实例
Nov 01 Javascript
移动开发之自适应手机屏幕宽度
Nov 23 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
Sep 04 Javascript
Vue多组件仓库开发与发布详解
Feb 28 Javascript
详解JS浏览器事件循环机制
Mar 27 Javascript
JavaScript实现抖音罗盘时钟
Oct 11 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
Feb 15 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+mysql留言本源码
2009/11/11 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
深入解析php中的foreach函数
2013/08/31 PHP
php文件系统处理方法小结
2016/05/23 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
jQuery常见开发技巧详细整理
2013/01/02 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
python正则表达式实例代码
2020/03/03 Python
Python中如何添加自定义模块
2020/06/09 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
大专自我鉴定范文
2013/10/23 职场文书
董事长助理工作职责
2014/06/08 职场文书
创优争先心得体会
2014/09/11 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
博物馆观后感
2015/06/05 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
志愿服务心得体会
2016/01/15 职场文书