最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前面的話

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

效果演示

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

通過使用如下代碼,可將進度插件插入頁面中

<script src=">

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

<script src=">

原理解釋

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

具體實現(xiàn)

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

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

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

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

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

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

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

將progress的max值設置為H,將value值設置為h。滾動事件觸發(fā)時,更新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】動態(tài)腳本

由于最終將以插件的形式呈現(xiàn),所有的代碼都需要動態(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);
//計算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) + '%'; 
});

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

相關文章

  • Openlayers實現(xiàn)圖形繪制

    Openlayers實現(xiàn)圖形繪制

    這篇文章主要為大家詳細介紹了Openlayers實現(xiàn)圖形繪制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • js實現(xiàn)小球在頁面規(guī)定的區(qū)域運動

    js實現(xiàn)小球在頁面規(guī)定的區(qū)域運動

    這篇文章主要為大家詳細介紹了js控制小球在規(guī)定范圍運動,碰到邊界就改變運動方向,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • webpack 模塊熱替換原理

    webpack 模塊熱替換原理

    這篇文章主要介紹了webpack 模塊熱替換原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • JS實現(xiàn)模態(tài)框拖拽動態(tài)效果

    JS實現(xiàn)模態(tài)框拖拽動態(tài)效果

    這篇文章主要為大家詳細介紹了JS實現(xiàn)模態(tài)框拖拽動態(tài)效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 原生js實現(xiàn)form表單序列化的方法

    原生js實現(xiàn)form表單序列化的方法

    這篇文章主要介紹了原生js實現(xiàn)form表單序列化的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 原來JS還可以這樣拆箱轉(zhuǎn)換詳解

    原來JS還可以這樣拆箱轉(zhuǎn)換詳解

    這篇文章主要給大家介紹了關于JS拆箱轉(zhuǎn)換的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02
  • 20行js代碼實現(xiàn)的貪吃蛇小游戲

    20行js代碼實現(xiàn)的貪吃蛇小游戲

    曾經(jīng)諾基亞的貪吃蛇風靡一時,在游戲匱乏的年代,用Java實現(xiàn)太難,現(xiàn)在網(wǎng)頁制作20行代碼就做成一個簡單的demo了,下面這篇文章主要給大家介紹了利用20行js代碼實現(xiàn)的貪吃蛇小游戲,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • javascript之通用簡單的table選項卡實現(xiàn)(二)

    javascript之通用簡單的table選項卡實現(xiàn)(二)

    上篇中的選項卡存在這樣的問題:把邏輯封裝在table.js中,不夠靈活,也就是說如果某個選項卡是實現(xiàn)異步請求或者跳轉(zhuǎn),而非div的顯隱切換,那么就得修過table.js來達到目的,顯然不是我所需要的。
    2010-05-05
  • JavaScript 數(shù)組運用實現(xiàn)代碼

    JavaScript 數(shù)組運用實現(xiàn)代碼

    復習一下JS中數(shù)組的運用。學習js數(shù)組的朋友可以參考下。
    2010-04-04
  • 詳解JS同源策略和CSRF

    詳解JS同源策略和CSRF

    這篇文章主要介紹了JS同源策略和CSRF,對跨站跨域感興趣的同學,可以看一下
    2021-05-05

最新評論

桓仁| 宣威市| 阳原县| 广元市| 睢宁县| 通辽市| 黄大仙区| 浦县| 遂平县| 涞源县| 绥宁县| 伊春市| 瑞丽市| 法库县| 秭归县| 仁寿县| 阳东县| 五莲县| 安龙县| 大石桥市| 庆云县| 龙陵县| 伊金霍洛旗| 峨眉山市| 邳州市| 宁乡县| 东乌| 北宁市| 和硕县| 新宾| 六枝特区| 商城县| 株洲市| 静安区| 新晃| 凯里市| 响水县| 乌鲁木齐县| 津南区| 淮阳县| 正宁县|