在文章右上角添加目录导航

在文章右上角添加目录导航

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

原文地址:https://www.cnblogs.com/lfri/p/10357313.html

时间: 2024-10-03 17:23:06

在文章右上角添加目录导航的相关文章

博客园随笔中添加目录导航悬浮框

1,在博客园设置中申请js权限,写明申请理由大约2-3小时通过 2,通过后在后台设置中添加CSS代码 /*生成博客目录的CSS*/ #uprightsideBar{ font-size:12px; font-family:Arial, Helvetica, sans-serif; text-align:left; position:fixed;/*将div的位置固定到距离top:50px,right:0px的位置,这样div就会处在最右边的位置,距离顶部50px*/ top:50px; righ

【转】为博客园添加目录的方法总结

本文转自:作者:妙音天女    地址:http://www.cnblogs.com/xuehaoyue/p/6650533.html 目录 第一种:在正文上方直接添加目录 1. 申请开通js权限 2. 添加js脚本到“页脚Html代码” 3. 按格式写文章 第二种:在文章右上角添加目录导航 1. 申请开通js权限 2. 添加css代码到“页面定制CSS代码” 3. 添加js脚本到“页首Html代码” 4. 按格式写文章 参考链接:http://www.cnblogs.com/xdp-gacl/p

【转】博客美化(6)为你的博文自动添加目录

[分享]博客美化(6)为你的博文自动添加目录 阅读目录 1.目录样式文件 2.为文章添加固定的信息 3.自动生成目录代码 博客园美化相关文章目录:博客园博客美化相关文章目录 这篇文章使用的代码来自于博客园的marvin,非常感谢.在他的文章:如何给你的为知笔记添加一个漂亮的导航目录中,介绍了给文章自动添加目录的过程,我当时就非常兴奋,一直想要个类似的插件,就是不会写.所以当天就咨询了marvin,在他的提示下,我把他博客的CSS和js文件扒下来了,经过一番改进,成为了我博客目前使用的,所以分享出

为博客添加目录

主要参考来源:http://www.cnblogs.com/xuehaoyue/p/6650533.html#_labelTop 在文章左边角添加目录导航 1. 申请开通js权限 默认是不支持,需要打开博客园后台,进入“设置”标签页,点击“申请开通js权限”,并注明用途 如果想加快申请速度,也可以再向官方发个邮件(邮箱是[email protected]),邮件也需要注明用途,快的话1小时就能搞定了 2. 添加css代码到“页面定制CSS代码” /*生成博客目录的CSS*/ #uprightsi

C#泛型专题系列文章目录导航

[C#泛型系列文章] 目录导航 第一部分:O'Reilly 出版的<C# Cookbook>泛型部分翻译 第一回:理解泛型 第二回:获取泛型类型和使用相应的泛型版本替换ArrayList 第三回:使用相应的泛型版本替换Stack和Queue 第四回:链表的实现和可空类型 第五回:反转SortedList里的内容 第六回:使用泛型创建只读集合及使用相应的泛型版本替换Hashtable 第七回:在泛型字典类中使用foreach及泛型约束 第八回:初始化泛型类型变量为它们的默认值 第二部分:O'Re

ASP.NET文章目录导航

ASP.NET文章目录导航 ASP.NET-[读书笔记]-原创:ASP.Net状态管理读书笔记--思维导图 (2013-12-25 10:13) ASP.NET-[潜在危险]-从客户端中检测到有潜在危险的Request.Form值的解决方法 (2014-07-17 14:52) ASP.NET-[HTTP错误]-HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置 (2014-07-17 14:51) ASP.N

ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能

原文:ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能 在最新发布的ActiveReports 9报表控件中添加了多项新功能,以帮助你在更短的时间里创建外观绚丽.功能强大的报表系统,本文将重点介绍新增文档目录控件(TOC),通过拖拽操作便可添加报表目录. 目录控件可以帮助用户快速的导航到位于报表中希望查看的数据.可以使用目录控件内嵌报表主体的内容列表用于打印和导出.不像文档结构图只能在报表浏览器中查看不能导出或者打印. 本示例被分解为下面的步骤 Visual St

[转]JavaScript自动生成博文目录导航

转自:http://www.cnblogs.com/xdp-gacl/p/3718879.html 我们在写博客的时候,如果博文里面有目录,会给人结构清晰.一种一目了然的感觉,看目录就知道这篇博文要讲解的内容,并且点击目录标题就可以跳转到具体的内容,这样园友们在看博客的时候就可以很方便地浏览自己感兴趣的内容,但是遗憾的是博客园不支持博文目录的生成,好像也有园友给博客园提建议,希望能够像CSDN那样能够自动生成博文目录,但是不知道是什么原因,博客园一直都没有把这个功能加上去,既然没有,那我就自己做

JavaScript自动生成博文目录导航

我们在写博客的时候,如果博文里面有目录,会给人结构清晰.一种一目了然的感觉,看目录就知道这篇博文要讲解的内容,并且点击目录标题就可以跳转到具体的内容,这样园友们在看博客的时候就可以很方便地浏览自己感兴趣的内容,但是遗憾的是博客园不支持博文目录的生成,好像也有园友给博客园提建议,希望能够像CSDN那样能够自动生成博文目录,但是不知道是什么原因,博客园一直都没有把这个功能加上去,既然没有,那我就自己做吧,研究了2天,总算是按照自己的设想做出来了,最终效果如下: 下面来介绍一下这个小工具的实现. 一.