canvas绘制圆形进度条(或显示当前已浏览网页百分比)
使用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绘制圆形进度条(或显示当前已浏览网页百分比)的更多相关文章
- HTML5效果:Canvas 实现圆形进度条并显示数字百分比
实现效果 1.首先创建html代码 <canvas id="canvas" width="500" height="500" styl ...
- canvas 绘制圆形进度条
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- canvas 绘制环形进度条
结果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...
- html5 canvas绘制环形进度条,环形渐变色仪表图
html5 canvas绘制环形进度条,环形渐变色仪表图 在绘制圆环前,我们需要知道canvas arc() 方 ...
- css and canvas实现圆形进度条
进度条效果: 话不多说,上代码 使用css动画实现,看到一篇博客的启发,稍微修改了下, css实现的原理是用两个半圆一开始隐藏,再分别旋转180度,最后成为一个整圆 半圆效果,一开始右边的半圆在盒 ...
- canvas绘制环形进度条
<!DOCTYPE html> <html > <head> <meta http-equiv="content-type" conten ...
- Android 自定义 View 圆形进度条总结
Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...
- canvas圆形进度条
通过定义一个canvas标签, new方法传进ID值,和旋转角度值,即可生成圆形进度条 <!DOCTYPE html> <html lang="en"> & ...
- 【Android 应用开发】 自定义 圆形进度条 组件
转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...
随机推荐
- (简单) POJ 1961 Period,扩展KMP。
Description For each prefix of a given string S with N characters (each character has an ASCII code ...
- javascript 巴西世界杯倒计时
巴西世界杯是足球迷的今年最终关注的事情,做为球迷的我也不例外,自己做了一个巴西世界杯的倒计时. <!DOCTYPE html> <html> <head> < ...
- [Unity Physics] Physics - Raycast
Class Variables类变量 gravity The gravity applied to all rigid bodies in the scene.场景中应用到所有刚性物体的重力. min ...
- <iOS>UIImage变为NSData并进行压缩
http://www.cnblogs.com/robinkey/archive/2013/01/21/2869930.html //sdk中提供了方法可以直接调用 UIImage *img = [UI ...
- linux命令学习6-dpkg命令
dpkg命令是Debian Linux系统用来安装.创建和管理软件包的实用工具. 1. 语法 dpkg (选项) (参数)2. 选项 -i:安装软件包: -r:删除软件包: -P:删除软件包的同时删除 ...
- mvc中上传图片到指定文件夹中
前台: @using (Html.BeginForm("AddImg", "UpFileImg", FormMethod.Post, new { enctype ...
- iOS自定义字体及类目
1:获取字体文件 从各种渠道下载字体文件ttf, 网站或者从别的ipa里扣出来.(以fzltxh.ttf为例) 2:将fzltxh.ttf文件拷贝到工程中 3:在Info.plist中添加项: Fon ...
- Tsinsen-A1489 抽奖 【数学期望】
乔明达太神,其实已经题解非常清楚了,我再推一遍吧. 题目意思相当于有n个盒子,无差别投m次球,每个盒子的得分为每个盒子里的球的个数. 第一问: 假设这个球放在了第i个盒子里,那么 ∆ans = (mi ...
- WebService 使用wsdl.exe生成代理类
利用wsdl.exe生成webservice代理类: 根据提供的wsdl生成webservice代理类 1.开始->程序->Visual Studio 2005 命令提示 2.输入如下红色 ...
- poi2007
序:为什么写poi,zy说poi都是思路题目,不像hnoi妈的数据结构队..... 1.bzoj1102 题目大意:定义了一个山谷和山峰,求他们数量. 题解:这种题bfs咯,在bfs的时候记录一下相邻 ...