1. 程式人生 > >在文章右上角添加目錄導航

在文章右上角添加目錄導航

創建 加載 post 子標題 博客 display spl 頂部 deb

在文章右上角添加目錄導航

1、添加css代碼到“頁面定制css代碼”

 1 /*生成博客目錄的CSS*/
 2 #uprightsideBar{
 3     font-size:12px;
 4     font-family:Arial, Helvetica, sans-serif;
 5     text-align:left;
 6     position:fixed;/*將div的位置固定到距離top:50px,right:0px的位置,這樣div就會處在最右邊的位置,距離頂部50px*/
 7     top:50px;
 8     right:0px
; 9 width: auto; 10 height: auto; 11 } 12 #sideBarTab{ 13 float:left; 14 width:30px; 15 border:1px solid #e5e5e5; 16 border-right:none; 17 text-align:center; 18 background:#ffffff; 19 } 20 21 #sideBarContents{ 22 float:left; 23 overflow:auto; 24
overflow-x:hidden;!important; 25 width:200px; 26 min-height:108px; 27 max-height:460px; 28 border:1px solid #e5e5e5; 29 border-right:none; 30 background:#ffffff; 31 } 32 #sideBarContents dl{ 33 margin:0; 34 padding:0; 35 } 36 37 #sideBarContents dt{ 38 margin-top
:5px; 39 margin-left:5px; 40 } 41 42 #sideBarContents dd, dt { 43 cursor: pointer; 44 } 45 46 #sideBarContents dd:hover, dt:hover { 47 color:#A7995A; 48 } 49 #sideBarContents dd{ 50 margin-left:20px; 51 }

2、添加js腳本到“頁首html代碼”

  1 <script type="text/javascript">
  2 /*
  3     功能:生成博客目錄的JS工具
  4     測試:IE8,火狐,google測試通過
  5     孤傲蒼狼
  6     2014-5-11
  7 */
  8 var BlogDirectory = {
  9     /*
 10         獲取元素位置,距瀏覽器左邊界的距離(left)和距瀏覽器上邊界的距離(top)
 11     */
 12     getElementPosition:function (ele) {        
 13         var topPosition = 0;
 14         var leftPosition = 0;
 15         while (ele){              
 16             topPosition += ele.offsetTop;
 17             leftPosition += ele.offsetLeft;        
 18             ele = ele.offsetParent;     
 19         }  
 20         return {top:topPosition, left:leftPosition}; 
 21     },
 22 
 23     /*
 24     獲取滾動條當前位置
 25     */
 26     getScrollBarPosition:function () {
 27         var scrollBarPosition = document.body.scrollTop || document.documentElement.scrollTop;
 28         return  scrollBarPosition;
 29     },
 30     
 31     /*
 32     移動滾動條,finalPos 為目的位置,internal 為移動速度
 33     */
 34     moveScrollBar:function(finalpos, interval) {
 35 
 36         //若不支持此方法,則退出
 37         if(!window.scrollTo) {
 38             return false;
 39         }
 40 
 41         //窗體滾動時,禁用鼠標滾輪
 42         window.onmousewheel = function(){
 43             return false;
 44         };
 45           
 46         //清除計時
 47         if (document.body.movement) { 
 48             clearTimeout(document.body.movement); 
 49         } 
 50 
 51         var currentpos =BlogDirectory.getScrollBarPosition();//獲取滾動條當前位置
 52 
 53         var dist = 0; 
 54         if (currentpos == finalpos) {//到達預定位置,則解禁鼠標滾輪,並退出
 55             window.onmousewheel = function(){
 56                 return true;
 57             }
 58             return true; 
 59         } 
 60         if (currentpos < finalpos) {//未到達,則計算下一步所要移動的距離
 61             dist = Math.ceil((finalpos - currentpos)/10); 
 62             currentpos += dist; 
 63         } 
 64         if (currentpos > finalpos) { 
 65             dist = Math.ceil((currentpos - finalpos)/10); 
 66             currentpos -= dist; 
 67         }
 68         
 69         var scrTop = BlogDirectory.getScrollBarPosition();//獲取滾動條當前位置
 70         window.scrollTo(0, currentpos);//移動窗口
 71         if(BlogDirectory.getScrollBarPosition() == scrTop)//若已到底部,則解禁鼠標滾輪,並退出
 72         {
 73             window.onmousewheel = function(){
 74                 return true;
 75             }
 76             return true;
 77         }
 78         
 79         //進行下一步移動
 80         var repeat = "BlogDirectory.moveScrollBar(" + finalpos + "," + interval + ")"; 
 81         document.body.movement = setTimeout(repeat, interval); 
 82     },
 83     
 84     htmlDecode:function (text){
 85         var temp = document.createElement("div");
 86         temp.innerHTML = text;
 87         var output = temp.innerText || temp.textContent;
 88         temp = null;
 89         return output;
 90     },
 91 
 92     /*
 93     創建博客目錄,
 94     id表示包含博文正文的 div 容器的 id,
 95     mt 和 st 分別表示主標題和次級標題的標簽名稱(如 H2、H3,大寫或小寫都可以!),
 96     interval 表示移動的速度
 97     */
 98     createBlogDirectory:function (id, mt, st, interval){
 99          //獲取博文正文div容器
100         var elem = document.getElementById(id);
101         if(!elem) return false;
102         //獲取div中所有元素結點
103         var nodes = elem.getElementsByTagName("*");
104         //創建博客目錄的div容器
105         var divSideBar = document.createElement(‘DIV‘);
106         divSideBar.className = ‘uprightsideBar‘;
107         divSideBar.setAttribute(‘id‘, ‘uprightsideBar‘);
108         var divSideBarTab = document.createElement(‘DIV‘);
109         divSideBarTab.setAttribute(‘id‘, ‘sideBarTab‘);
110         divSideBar.appendChild(divSideBarTab);
111         var h2 = document.createElement(‘H2‘);
112         divSideBarTab.appendChild(h2);
113         var txt = document.createTextNode(‘目錄導航‘);
114         h2.appendChild(txt);
115         var divSideBarContents = document.createElement(‘DIV‘);
116         divSideBarContents.style.display = ‘none‘;
117         divSideBarContents.setAttribute(‘id‘, ‘sideBarContents‘);
118         divSideBar.appendChild(divSideBarContents);
119         //創建自定義列表
120         var dlist = document.createElement("dl");
121         divSideBarContents.appendChild(dlist);
122         var num = 0;//統計找到的mt和st
123         mt = mt.toUpperCase();//轉化成大寫
124         st = st.toUpperCase();//轉化成大寫
125         //遍歷所有元素結點
126         for(var i=0; i<nodes.length; i++)
127         {
128             if(nodes[i].nodeName == mt|| nodes[i].nodeName == st)    
129             {
130                 //獲取標題文本
131                 var nodetext = nodes[i].innerHTML.replace(/<\/?[^>]+>/g,"");//innerHTML裏面的內容可能有HTML標簽,所以用正則表達式去除HTML的標簽
132                 nodetext = nodetext.replace(/ /ig, "");//替換掉所有的 
133                 nodetext = BlogDirectory.htmlDecode(nodetext);
134                 //插入錨        
135                 nodes[i].setAttribute("id", "blogTitle" + num);
136                 var item;
137                 switch(nodes[i].nodeName)
138                 {
139                     case mt:    //若為主標題 
140                         item = document.createElement("dt");
141                         break;
142                     case st:    //若為子標題
143                         item = document.createElement("dd");
144                         break;
145                 }
146                 
147                 //創建錨鏈接
148                 var itemtext = document.createTextNode(nodetext);
149                 item.appendChild(itemtext);
150                 item.setAttribute("name", num);
151                 item.onclick = function(){        //添加鼠標點擊觸發函數
152                     var pos = BlogDirectory.getElementPosition(document.getElementById("blogTitle" + this.getAttribute("name")));
153                     if(!BlogDirectory.moveScrollBar(pos.top, interval)) return false;
154                 };            
155                 
156                 //將自定義表項加入自定義列表中
157                 dlist.appendChild(item);
158                 num++;
159             }
160         }
161         
162         if(num == 0) return false; 
163         /*鼠標進入時的事件處理*/
164         divSideBarTab.onmouseenter = function(){
165             divSideBarContents.style.display = ‘block‘;
166         }
167         /*鼠標離開時的事件處理*/
168         divSideBar.onmouseleave = function() {
169             divSideBarContents.style.display = ‘none‘;
170         }
171 
172         document.body.appendChild(divSideBar);
173     }
174     
175 };
176 
177 window.onload=function(){
178     /*頁面加載完成之後生成博客目錄*/
179     BlogDirectory.createBlogDirectory("post_body","h2","h3",20);
180 }
181 </script>

3、備註

這個腳本支持h2、h3兩種標題,寫博文時要對標題添加h2、h3格式,腳本會自動生效,幫你建立導航目錄,並在頁面右上角顯示。

參考鏈接:http://www.cnblogs.com/jiu0821/p/8215156.html#_label2_1

在文章右上角添加目錄導航