使用canvas绘制圆形进度条,或者是网页加载进度条 或者是显示你浏览了本网页多少……

由于个浏览器的计算差异,打开浏览器时 初始值有所不同,但是当拉倒网页底部时,均显示100%。

兼容性:测试浏览器 chrome 、ff 、ie9+ 都可以正常显示 ,由于ie8及以下不支持canvas 不做考虑。

设计思路:

  1 .在画布上画一个圆,作为背景圆

  2 .画第二个圆坐标相同半径相同,作为进度圆,显示当前浏览进度

  3 .使用canvas的font属性在圆中间以数字的形式显示进度 ,以百分比来显示进度

  4 .计算

    网页高度:H=document.body.scrollHeight;

    可视区高度:clientH=document.documentElement.clientHeight || document.body.scrollHeight;

    滚动高度:scrollT=document.documentElement.scrollTop || document.body.scrollTop;

    计算比例:scale=(clientH+scrollT)/H; --->结果是小数形式,需要转成百分比形式,可以写一个方法

代码分析 

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
//小数转百分数
function toPercent(point){
var str = Number(point*100).toFixed(2);
if (str < 10) {
return '0'+str+'%';
}
return str+'%';
}
// 角度转弧度
function d2a(n){
return n*Math.PI/180;
}
// 圆形进度条方法封装
function pageView(oC){
var H = document.documentElement.scrollHeight || document.body.scrollHeight;
var clientH = document.documentElement.clientHeight;
var scrollT = document.documentElement.scrollTop || document.body.scrollTop; //浏览进度 比例
var scale = (clientH+scrollT)/H ;
var ctx = oC.getContext('2d');
// 公共样式 ,清空画布
ctx.clearRect(0,0,oC.width,oC.height); // 背景圆
ctx.beginPath();
ctx.lineWidth = 10;
ctx.arc(150,150,100,d2a(0),d2a(360),false);
ctx.strokeStyle = 'skyblue';
ctx.stroke(); // 进度圆
ctx.beginPath();
ctx.arc(150,150,100,d2a(-90),d2a(scale*360-90),false)
ctx.strokeStyle = 'rgb('+Math.floor(scale*255)+','+Math.floor(scale*201)+',163)' // 变化的颜色,可写成固定颜色
ctx.stroke(); // 显示百分比
ctx.beginPath();
var percent = toPercent(scale);
ctx.lineWidth = 2;
ctx.font = '40px Microsoft YaHei';
ctx.strokeStyle = '#d1d39e';
ctx.strokeText(percent,85,165) }
window.onload = window.onresize = window.onscroll = function(){ var oC = document.getElementById('canvas');
pageView(oC) //调用 }
</script>
</head>
<body style="height: 3000px">
<canvas width="300" height="300" id="canvas" style="position: fixed; left: 30px ;bottom: 50px;">
<span>您的浏览器不支持canvas</span>
</canvas> </body>
</html>

 网页展示效果

    

  

canvas绘制圆形进度条(或显示当前已浏览网页百分比)的更多相关文章

  1. HTML5效果:Canvas 实现圆形进度条并显示数字百分比

    实现效果 1.首先创建html代码 <canvas id="canvas" width="500" height="500" styl ...

  2. canvas 绘制圆形进度条

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. canvas 绘制环形进度条

    结果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  4. html5 canvas绘制环形进度条,环形渐变色仪表图

    html5 canvas绘制环形进度条,环形渐变色仪表图                                             在绘制圆环前,我们需要知道canvas arc() 方 ...

  5. css and canvas实现圆形进度条

    进度条效果:   话不多说,上代码 使用css动画实现,看到一篇博客的启发,稍微修改了下, css实现的原理是用两个半圆一开始隐藏,再分别旋转180度,最后成为一个整圆 半圆效果,一开始右边的半圆在盒 ...

  6. canvas绘制环形进度条

    <!DOCTYPE html> <html > <head> <meta http-equiv="content-type" conten ...

  7. Android 自定义 View 圆形进度条总结

    Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...

  8. canvas圆形进度条

    通过定义一个canvas标签, new方法传进ID值,和旋转角度值,即可生成圆形进度条 <!DOCTYPE html> <html lang="en"> & ...

  9. 【Android 应用开发】 自定义 圆形进度条 组件

    转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...

随机推荐

  1. ZOJ 3537 Cake

    区间DP. 首先求凸包判断是否为凸多边形. 如果是凸多边形:假设现在要切割连续的一段点,最外面两个一定是要切一刀的,内部怎么切达到最优解就是求子区间最优解,因此可以区间DP. #include< ...

  2. ubuntu如何安装Mac主题

    1.安装 Gnome 经典桌面 sudo apt-get install gnome-session-fallback 没有安装桌面的可安装 Gnome 桌面: sudo apt-get instal ...

  3. shell 实例学习

    安装crond:yum install crontabs  (http://blog.163.com/victory_wxl/blog/static/14130530220115296180333/) ...

  4. S3C2440串口及其中断系统详解

    个独立异步串行I/O(SIO)端口,每个都可以是基于中断或基于DMA模式的操作.换句话说,UART可以通过产生中断或DMA请求来进行CPU和UART之间的数据传输. 字节的FIFO给发送和接收. 字节 ...

  5. FIFO存储器

    FIFO( First In First Out)简单说就是指先进先出.由于微电子技术的飞速发展,新一代FIFO芯片容量越来越大,体积越来越小,价格越来越便宜.作为一种新型大规模集成电路,FIFO芯片 ...

  6. 在 WindowMobile 上的模拟LED 显示屏插件(转)

    源:在 WindowMobile 上的模拟LED 显示屏插件 我在给一个对话框上的控件查找翻看合适的图标时,无形中看到了一个LED显示屏的图标,这里所说的LED显示屏是指由很多LED灯密集排列组成的点 ...

  7. java基础——1.内部类

    内部类创建 从外部类的非静态方法之外(?=静态方法)的任意位置创建某个内部类的对象,要加入外部类的名字,OuterClassName.InnerClassName public class Parce ...

  8. Sybase分页存储过程实现

    项目中需要用到Sybase数据库的分页功能,想尽各种办法都没有成功,最后用如下的存储过程成功实现功能,记录备忘. ),@start int, @pageSize int as begin declar ...

  9. OC字符串的使用(一)

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  10. angular2教程

    https://github.com/lewis617/angular2-tutorial