全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

js 博客内容进度插件详解

前面的话

最近在复习自己写的博客,但有的博客内容很长,长到不知道多少时间可以读完。这时,就有种泄气的冲动。但,如果能够提供一个博客内容进度的插件,根据所读内容的多少,显示进度条,让自己对所读的内容进度心里有数,可以让自己平静下来,一点一点读下去。本文将详细介绍博客内容进度插件的实现

效果演示

无论是通过鼠标滚轮,还是拖动滚动条,也或者是按空格键,只要发生了页面的滚动操作,就会触发页面底部博客内容进度条的变化。根据当前内容的多少计算与博客所有内容的比例,最终对应成进度条的宽度。当鼠标移入进度条范围时,会以数字显示出当前的进度百分比

通过使用如下代码,可将进度插件插入页面中

<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小时内与您取得联系。