亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

js 博客內(nèi)容進(jìn)度插件詳解

 更新時(shí)間:2017年02月19日 14:26:52   作者:小火柴的藍(lán)色理想  
本篇文章主要介紹了博客內(nèi)容進(jìn)度插件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧

前面的話

最近在復(fù)習(xí)自己寫的博客,但有的博客內(nèi)容很長,長到不知道多少時(shí)間可以讀完。這時(shí),就有種泄氣的沖動(dòng)。但,如果能夠提供一個(gè)博客內(nèi)容進(jìn)度的插件,根據(jù)所讀內(nèi)容的多少,顯示進(jìn)度條,讓自己對所讀的內(nèi)容進(jìn)度心里有數(shù),可以讓自己平靜下來,一點(diǎn)一點(diǎn)讀下去。本文將詳細(xì)介紹博客內(nèi)容進(jìn)度插件的實(shí)現(xiàn)

效果演示

無論是通過鼠標(biāo)滾輪,還是拖動(dòng)滾動(dòng)條,也或者是按空格鍵,只要發(fā)生了頁面的滾動(dòng)操作,就會(huì)觸發(fā)頁面底部博客內(nèi)容進(jìn)度條的變化。根據(jù)當(dāng)前內(nèi)容的多少計(jì)算與博客所有內(nèi)容的比例,最終對應(yīng)成進(jìn)度條的寬度。當(dāng)鼠標(biāo)移入進(jìn)度條范圍時(shí),會(huì)以數(shù)字顯示出當(dāng)前的進(jìn)度百分比

通過使用如下代碼,可將進(jìn)度插件插入頁面中

<script src=">

由于目錄和進(jìn)度都是常用的功能,所以,我把進(jìn)度的功能整合到目錄生成的插件中了

<script src=">

原理解釋

上面已經(jīng)簡明扼要的說明了進(jìn)度條的原理,而實(shí)現(xiàn)起來也不困難。在觸發(fā)滾動(dòng)事件時(shí),計(jì)算兩個(gè)高度值。一個(gè)值H用來表示整篇博客內(nèi)容的底部離頁面頂端的距離。一個(gè)值h用來表示當(dāng)前窗口內(nèi)博客內(nèi)容的底部離頁面頂端的距離。從而比例值radio = h/H,就是進(jìn)度百分比,以進(jìn)度條的寬度變化顯示出來

具體實(shí)現(xiàn)

【1】獲取博客內(nèi)容總高度H,如下圖所知,博客園將博客內(nèi)容放在id為cnblogs_post_body的div內(nèi),通過scrollHeight來獲取其高度即可。且該值是固定不變的,不需在發(fā)生滾動(dòng)事件時(shí)再獲取,頁面加載完成后就可獲取

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】獲取當(dāng)前頁面窗口中顯示的博客內(nèi)容高度h,h實(shí)際上就是頁面的滾動(dòng)距離h2

var h = document.documentElement.scrollTop || document.body.scrollTop;

【3】進(jìn)度條實(shí)現(xiàn),通過H和h,可以計(jì)算出比例系數(shù)radio = h/H。HTML5新增了一個(gè)表單類控件progress,就是用來表示任務(wù)的進(jìn)度或進(jìn)程的

[注意]IE9-瀏覽器不支持

<progress id="progress" value="" max=""></progress>

如果是IE9-瀏覽器,progress元素被退化為div元素,僅顯示百分比即可

將progress的max值設(shè)置為H,將value值設(shè)置為h。滾動(dòng)事件觸發(fā)時(shí),更新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】樣式設(shè)置

進(jìn)度條的樣式設(shè)置較為簡單,將其固定定位,居于頁面底部,并與窗口寬度相同

.progress{
 position:fixed;
 left:0;
 right:0;
 bottom:0;
 width:100%;
 height:12px;
 text-align:center;
 font:12px/12px "宋體";
}

【5】動(dòng)態(tài)腳本

由于最終將以插件的形式呈現(xiàn),所有的代碼都需要?jiǎng)討B(tài)生成

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);
//計(jì)算H
var H;
addEvent(window,'load',function(){
 progress.max = H = cnblogs_post_body.scrollHeight;
});
//計(jì)算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) + '%'; 
});

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

最新評論