熱門文章

      最新文章

      Bootstrap框架動態生成Web頁面文章內目錄的方法

      發布時間:2021-06-22 15:26:45

      引言
      在寫博客的時候,為了條理性起見,經常會使用許多小標題,當文章長時,需要來回在不同的標題之間穿梭,如果手動添加目錄,添加錨點,實在是麻煩,為此,可以動態生成一塊目錄區域,并使用Bootstrap提供的Affix插件將目錄區域固定在頁面上。Bootstrap文檔便使用了它

      準備工作-引入bootstrap.min.js
      將bootstrap.min.js放入body之前的script標簽中,uikit.min.js暫時不引入。
      引入相關插件之后,我們的思路是首先根據文章自動生成錨點以及菜單內容,隨后為其添加Affix產生固定效果,再使用uikit的scrollSpy插件(bootstrap中也有scrollspy,使用方法幾乎一致)。

      引-學習Affix的使用
      Affix插件尅幫助我們固定導航部分的位置,并且根據用戶的滾動情況來為固定的元素增加垂直偏移量,使得nav在三個類之間進行切換:
      1.affix-top:表示在頂端
      2.affix:表示在頁面滾動,增加fixed屬性,同時使用自定義的offset偏移量
      3.affix-bottom:表示到達最底端

      啟用Affix只需要以下代碼:

      $('#nav').affix({
        offset: {
                top:$('header').offset().top,
            bottom: ($('footer').outerHeight(true) + 
              $('.application').outerHeight(true)) + 40
          }
      });

      一、組織HTML代碼部分

      <ul id="mysidebar" class="nav affix" >
      </ul>

      一定要注意為ul添加nav和affix類。

      二、生成封裝代碼
      將本代碼段引入到你自己的script腳本中

      ;$.fn.extend({
         "createAffix": function(selector) {
           $list = $("" + selector),
             length = $list.length,
             affixValue = "";
           for (var i = 0; i < length; i++) {
             //給每一個標題增加name屬性
             $list.eq(i).attr("id", ("node" + i));
             var text = $list.eq(i).text();
             if (i == 0) {
               affixValue += "<li><a href=#node" + i + " class='active' >" + text + "</a></li>";
             } else {
               affixValue += "<li><a href=#node" + i + ">" + text + "</a></li>";
             }
           }
           this.append(affixValue);
           this.affix({
             offset: {
               top: this.offset().top//在固定之后距離頂部的偏移量
             }
           });
           return this;
         }
       
      });

      上述代碼的原理是為createAffix函數傳入需要被認為是標題單元的標簽或者類,在遍歷過程中為其增加錨點鏈接。

      三、使用方法
      書寫HTML部分

      <ul id="mysidebar" class="nav affix" >
      <li><a href="#node1"></a></li>
      <li><a href="#node2"></a></li>
      <li><a href="#node3"></a></li>
      </ul>
       
      <h3 id="node1">標題1</h3>
      <h3 id="node2">標題2</h3>
      <h3 id="node3">標題3</h3>

      書寫Javascript部分

      $(function(){
      $(' #mysidebar').createAffix('h3');
      //表示在文章中,使用`h3`標簽的是 需要被添加錨點的地方。
      });

      解決錨點偏移的問題
      因為錨點默認將頁面偏移到錨點元素的頂部,也就是如果我們對標題1進行了上述操作,當我們點擊錨點時,頁面會偏移到'標題1'所在的頂端位置,如果頂端有菜單欄,那么將會被遮住,通過設置css樣式來解決。

      .class{
          /*
          添加padding可以讓錨點向下偏移num px,也就是跳過菜單欄的高度,
          通過設置margin-top為負值來`彌補`因為padding-top帶來的空白部分
          */
          padding-top: num px;
          margin-top: -num px;
      }

      添加滾動監聽
      目前我們的DOM文檔是這樣的。

      <ul id="mysidebar" class="nav affix" >
      <li><a href="#node1"></a></li>
      <li><a href="#node2"></a></li>
      <li><a href="#node3"></a></li>
      </ul>

      加工一下,引入uikit屬性,具體查看文檔

      <ul id="mysidebar" class="nav affix uk-nav uk-nav-side" data-uk-scrollspy-nav="{closest:'li',smoothscrool:true}" >
      <li><a href="#node1"></a></li>
      <li><a href="#node2"></a></li>
      <li><a href="#node3"></a></li>
      </ul>

      引入uikit.min.js
      由于我們的菜單項(li)是在文檔加載后執行的,那么如果在生成菜單項之前變執行uikit的scrollspy,那么必定不起作用,所以要在菜單項生成后引入uikit.min.js,代碼如下:

      $(function(){
      $(' #mysidebar').createAffix('h3');//生成菜單
      $.getScript("uikit.min.js");//異步載入uikit.min.js,滾動監聽生效。
      });


      返回頂部
      主站蜘蛛池模板: 岛国精品一区免费视频在线观看| 人妻精品无码一区二区三区| 久久er99热精品一区二区 | 亚洲熟妇无码一区二区三区| 国产福利电影一区二区三区| 无码国产精品一区二区免费| 国产AV午夜精品一区二区入口| 国产一区二区三区在线观看免费| 精品无人区一区二区三区在线| 日本在线不卡一区| 精品无码综合一区| 一区二区三区免费视频网站 | 国产一区二区三区免费观在线 | 亚洲国产成人精品无码一区二区 | 波霸影院一区二区| 尤物精品视频一区二区三区| 国产精品一级香蕉一区| 中文字幕一区视频| 亚洲一区二区三区在线观看蜜桃| 久久一区二区三区免费播放| 亚洲韩国精品无码一区二区三区| 久久久99精品一区二区| 精品乱子伦一区二区三区高清免费播放| 在线免费观看一区二区三区| 蜜桃传媒一区二区亚洲AV| 亚洲AV日韩综合一区| 欧美日韩精品一区二区在线视频 | 美女视频在线一区二区三区| 国产午夜精品一区二区三区嫩草 | 一区二区不卡久久精品| 亚洲男人的天堂一区二区| 国产精品污WWW一区二区三区| 国产成人精品一区二三区在线观看| 免费一区二区三区在线视频| 色欲AV无码一区二区三区| 国产高清在线精品一区二区三区| 中文字幕在线一区| 人妻无码一区二区不卡无码av | 国产免费一区二区三区免费视频| 亚洲人成网站18禁止一区| 国产日韩一区二区三免费高清|