zoukankan      html  css  js  c++  java
  • 博客园目录制作

    一、目录整合

      一直想为自己的博客园文章做个目录导航,此前为了省劲儿想套用别人现成的,但效果不是特别理想,还是决定自己动手做一个适合自己的。目录效果就在右边,这其实是借鉴layui官网文档目录导航的样式和功能。制作过程就不再细讲了,这里主要讲如何将这个目录整合到你的文章中(建议先看该注意事项,若不能接受可直接退出节省时间)。

    1.1 页首 HTML 代码

      步骤比较简单,具体的图我就不贴了,首先就是将下面这行代码粘贴至 博客园后台-->设置-->页首 HTML 代码中。

    <link rel="stylesheet" href="https://blog-static.cnblogs.com/files/liuguo/createDir.css">
    

     1.2

      接下来就是将下面的代码粘贴至 博客园后台-->设置-->页脚 HTML 代码中。

     <script src="https://blog-static.cnblogs.com/files/liuguo/createDir.js"></script>
        <script>
          window.onload = function() {
                var id = "cnblogs_post_body";
                var elem = document.getElementById(id);
          //页面不包含名为cnblogs_post_body的id或屏幕宽度小于450时不生成目录
              if (!elem || screen.width < 450) return false;
                createDir(id, {
                    h2: "h2",
                    h3: "h3"
                });
                drag();
                a();
            }
        </script>
    

     1.3 注意事项

      经过以上两步操作,目录的引入工作就算完成了,但这里仍有一些事情需要注意:

      (1)目录兼容性:该目录不兼容移动设备如平板,手机(手机端不会生成该目录)等,已知兼容谷歌,火狐和windows 10的Edge(其他浏览器没有测试),谷歌渲染出来的可能有点怪,莫名的比火狐和Edge的要大上一点,这可能和博客使用的模板样式设定有关(我使用的模板在谷歌上有水平滚动条,火狐,IE则没有)。

      (2)目录获取:该目录只支持二级体系,具体是对哪些标签获取,可根据传入参数而改变,默认为H2和H3标签。

      (3)界面美化:目录的美观与否与文章的排版有一定的关系,所以一定注意文章排版的美观。另外目录对获取的文字有截取功能,防止文字过长影响美感,限制的最大文字长度为20个汉字,超出文本将用“···”替换,目录对高度也有限制,超出高度会追加竖直滚动条。

      (4)二次制作:建议大家把相应的Js和Css文件下载并上传到自己的博客园文件中,这样当我把文件删除时不会影响到大家的使用体验。另外,Js文件中有大量的注释,如果大家对该目录不满意可以根据注释尝试对其二次制作。

    1.4 致谢

      在制作目录导航的过程中,我也参观了不少优秀的制作目录导航的博文,也受到了一定程度的启发。非常感谢这些文章,下面将文章链接贴上。

    二、知识总结

      看似是一个简单的小功能,但由于前段基础薄弱,制作这个也确实花费了我不少的时间,下面对制作过程中收获的知识点进行总结。

    2.1 HTML5的锚点问题

      相较于HTML4只能通过a标签的name属性设置锚点而言,HTML5设置锚点的方式更加灵活,它是使用id属性设置锚点(无论什么标签,只要有id属性都可以),这样以来就不需要再去嵌套a标签做锚点了,跳转也更加灵活方便。

    2.2 浏览器渲染页面的两种模式

      W3C标准推出以后,浏览器都开始采纳新标准,但为了兼容以前的页面,浏览器保留了旧的渲染模式。区分这两种渲染模式的方式就是HTML头部的doctype声明,当浏览器能正常识别doctype声明时为Standars mode(标准模式),当页面没有doctype声明或浏览器无法识别doctype时采用Quirks mode(怪异模式)。

      这两种模式的主要区别如下:

      在Standars mode中: 元素真正的宽度 = margin-left   +   border-left-width   +   padding-left   + width   +   padding-right   +   border-right-width   +   margin-right; 

      在Quirks mode中: width则是元素的实际宽度,内容宽度 = width   -   (margin-left   +   margin-right   +   padding-left   +   padding-right   +   border-left-width   +   border-right-width)

      在Js中可以通过window.top.document.compatMode来查看浏览器对当前页面的渲染模式,结果BackCompat对应怪异模式,CSS1Compat对应标准模式。

      在JQuery中使用 $.boxModel 和 $.support.boxModel 来查看渲染模式。

    2.3 Js中if 里的逻辑表达式

      js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。若 if() 逻辑(表达式)判断里面的值是一个字符串, 如 user.id 是一串字符, 那据下列情况判断出的逻辑值就是:

      字符串是否为空?即 “” 与 “   ”的区别(若其长度为 0,逻辑值为 false;其长度 > 0,逻辑值为 true)。

      字符串是否被赋值?(若未赋值,即为undefined,或赋予空值,逻辑值为 false;否则,逻辑值为 true)。

      如果 id="0",表明字符串长度为 1, 结果,逻辑判断值为 true。

      如果 id= 0 ,则认定 id 是个 number 型, 结果,逻辑判断值为 false。

      如果 id= false ,则认定 id 是个 boolean 型的数据, 结果,逻辑判断值为 false。

      如果 id= null ,则认定 id 是个 object 型(引用型)的数据, 结果,逻辑判断值为 false。

    2.4 Js中的闭包概念

      概念:内部函数总是可以访问其所在的外部函数中声明的参数变量,即使在其外部函数被返回(寿命终结)了之后。

      为加深对这句话的理解,下面给出两个例子帮助理解。

    //案例1
    function outerFn(){
      var i = 0; 
      function innerFn(){
          i++;
          console.log(i);
      }
      return innerFn;
    }
    var inner = outerFn();  //每次外部函数执行的时候,都会开辟一块内存空间,外部函数的地址不同,都会重新创建一个新的地址
    inner();
    inner();
    inner();
    var inner2 = outerFn();
    inner2();
    inner2();
    inner2();   //1 2 3 1 2 3
    
    //===========案例2===========
    function fun(n,o) {
        console.log(o);
        return {
             fun:function(m) {
                   return fun(m,n);
             }
        };
    }
    var a = fun(0);  //undefined
    a.fun(1);  //0  
    a.fun(2);  //0  
    a.fun(3);  //0  
    var b = fun(0).fun(1).fun(2).fun(3);   //undefined  0  1  2
    var c = fun(0).fun(1);  
    c.fun(2);  
    c.fun(3);  //undefined  0  1  1
    

       结论:闭包找到的是同一地址中父级函数中对应变量最终的值。

    2.4 致谢

      关于闭包等有关知识点,我也找到了一些讲的很好的博客,同样非常感谢这些文章,下面给出链接。

      

    学习和码字过程难免出现疏漏,欢迎指正!QQ:1801888312
  • 相关阅读:
    经典音乐插曲推荐![附地址]
    广播电台常用51首背景音乐——绝对经典
    酒吧..夜店常用歌曲~潮人必备音乐噢~【附下载地址】
    ASP与ASP.NET互通COOKIES的一点经验
    linux进程状态浅析
    常用的酒吧经典乐曲106首
    呼和浩特电视台媒资管理系统的设计与分析
    不再为DataGrid生成的表格的单无格中的内容过长、自动折行、表格撑开等问题而烦恼
    Linux shell脚本全面学习
    ASP.NET文件管理显示信息
  • 原文地址:https://www.cnblogs.com/liuguo/p/12944462.html
Copyright © 2011-2022 走看看