前面的话

最近在复习自己写的博客,但有的博客内容很长,长到不知道多少时间可以读完。这时,就有种泄气的冲动。但,如果能够提供一个博客内容进度的插件,根据所读内容的多少,显示进度条,让自己对所读的内容进度心里有数,可以让自己平静下来,一点一点读下去。本文将详细介绍博客内容进度插件的实现
效果演示
无论是通过鼠标滚轮,还是拖动滚动条,也或者是按空格键,只要发生了页面的滚动操作,就会触发页面底部博客内容进度条的变化。根据当前内容的多少计算与博客所有内容的比例,最终对应成进度条的宽度。当鼠标移入进度条范围时,会以数字显示出当前的进度百分比
通过使用如下代码,可将进度插件插入页面中
<script src="http://files.cnblogs.com/files/xiaohuochai/progress.js"></script>
由于目录和进度都是常用的功能,所以,我把进度的功能整合到目录生成的插件中了
<script src="http://files.cnblogs.com/files/xiaohuochai/catalog.js"></script>
原理解释
上面已经简明扼要的说明了进度条的原理,而实现起来也不困难。在触发滚动事件时,计算两个高度值。一个值H用来表示整篇博客内容的底部离页面顶端的距离。一个值h用来表示当前窗口内博客内容的底部离页面顶端的距离。从而比例值radio = h/H,就是进度百分比,以进度条的宽度变化显示出来
具体实现
【1】获取博客内容总高度H,如下图所知,博客园将博客内容放在id为cnblogs_post_body的div内,通过scrollHeight来获取其高度即可。且该值是固定不变的,不需在发生滚动事件时再获取,页面加载完成后就可获取
function addEvent(target,type,handler){
if(target.addEventListener){
target.addEventListener(type,handler,false);
}else{
target.attachEvent('on'+type,function(event){
return handler.call(target,event);
});
}
}
var H;
addEvent(window,'load',function(){
H = cnblogs_post_body.scrollHeight;
});
【2】获取当前页面窗口中显示的博客内容高度h,h实际上就是页面的滚动距离h2
var h = document.documentElement.scrollTop || document.body.scrollTop;
【3】进度条实现,通过H和h,可以计算出比例系数radio = h/H。HTML5新增了一个表单类控件progress,就是用来表示任务的进度或进程的
[注意]IE9-浏览器不支持
<progress id="progress" value="" max=""></progress>
如果是IE9-浏览器,progress元素被退化为div元素,仅显示百分比即可
将progress的max值设置为H,将value值设置为h。滚动事件触发时,更新value值即可
addEvent(window,'scroll',function(){
var h = document.documentElement.scrollTop || document.body.scrollTop;
progress.value = h;
var radio = (h/H >= 1) ? 1 : h/H;
progress.innerHTML = progress.title = Math.floor(100*radio) + '%';
});
【4】样式设置
进度条的样式设置较为简单,将其固定定位,居于页面底部,并与窗口宽度相同
.progress{
position:fixed;
left:0;
right:0;
bottom:0;
width:100%;
height:12px;
text-align:center;
font:12px/12px "宋体";
}
【5】动态脚本
由于最终将以插件的形式呈现,所有的代码都需要动态生成
var progress = document.createElement('progress');
progress.id = 'progress';
document.body.appendChild(progress);
插件代码
//事件兼容
function addEvent(target,type,handler){
if(target.addEventListener){
target.addEventListener(type,handler,false);
}else{
target.attachEvent('on'+type,function(event){
return handler.call(target,event);
});
}
}
//生成元素
var progress = document.createElement('progress');
progress.id = 'progress';
progress.style.cssText = 'position:fixed;left:0;right:0;bottom:0;width:100%;height:12px;text-align:center;font:12px/12px "宋体";';
document.body.appendChild(progress);
//计算H
var H;
addEvent(window,'load',function(){
progress.max = H = cnblogs_post_body.scrollHeight;
});
//计算h及radio
addEvent(window,'scroll',function(){
var h = document.documentElement.scrollTop || document.body.scrollTop;
progress.value = h;
var radio = (h/H >= 1) ? 1 : h/H;
progress.innerHTML = progress.title = Math.floor(100*radio) + '%';
});
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js进度条插件
# 进度条插件
# node.js实现博客小爬虫的实例代码
# 用js实现博客打赏功能
# 利用JS生成博文目录及CSS定制博客
# JS实现新浪博客左侧的Blog管理菜单效果代码
# 基于jsp+servlet实现的简单博客系统实例(附源码)
# javascript实现博客园页面右下角返回顶部按钮
# js使用ajax读博客rss示例
# 博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
# 用js实现的仿sohu博客更换页面风格(简单版)
# nodejs个人博客开发第七步 后台登陆
# 博客
# 进度条
# 设置为
# 宋体
# 都是
# 就会
# 也不
# 放在
# 所读
# 鼠标
# 的说
# 心里有数
# 简明扼要
# 将其
# 我把
# 或者是
# 就可
# 中了
# 详细介绍
# 不支持
相关文章:
如何在宝塔面板创建新站点?
如何在阿里云完成域名注册与建站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
定制建站如何定义?其核心优势是什么?
微课制作网站有哪些,微课网怎么进?
网站制作公司排行榜,四大门户网站排名?
*服务器网站为何频现安全漏洞?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
网站制作说明怎么写,简述网页设计的流程并说明原因?
香港服务器部署网站为何提示未备案?
如何在阿里云虚拟主机上快速搭建个人网站?
常州自助建站工具推荐:低成本搭建与模板选择技巧
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
建站VPS选购需注意哪些关键参数?
如何通过PHP快速构建高效问答网站功能?
如何快速登录WAP自助建站平台?
在线制作视频网站免费,都有哪些好的动漫网站?
相册网站制作软件,图片上的网址怎么复制?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何通过二级域名建站提升品牌影响力?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何在万网ECS上快速搭建专属网站?
潮流网站制作头像软件下载,适合母子的网名有哪些?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何通过可视化优化提升建站效果?
制作旅游网站html,怎样注册旅游网站?
ui设计制作网站有哪些,手机UI设计网址吗?
香港服务器租用费用高吗?如何避免常见误区?
建设网站制作价格,怎样建立自己的公司网站?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
电商网站制作公司有哪些,1688网是什么意思?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
建站主机类型有哪些?如何正确选型
建站之星各版本价格是多少?
如何快速搭建高效WAP手机网站?
建站三合一如何选?哪家性价比更高?
如何快速搭建高效香港服务器网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。