1. 程式人生 > 實用技巧 >部落格園裝飾——(一)置頂選單欄

部落格園裝飾——(一)置頂選單欄

部落格園裝飾——(一)置頂選單欄

一、功能描述

1.1 文字描述

  • 當頁面向下滾動到選單欄上邊沿觸碰到瀏覽器視窗上邊沿時,選單欄會固定地顯示在瀏覽器視窗上方(貼緊),即達到了置頂選單欄的效果。而當頁面向上滾動到原來的位置時,選單欄又會自動返回文件流,即回到初始的位置

1.2 圖片效果展示

1.2.1 例程(demo)效果展示

1.2.2 本人部落格園效果展示

有現成的效果喲~你確定不試一哈?



二、 程式碼展示

2.1 html 部分

<body>
		<div id="header">
			<div class="else"></div>
			<div id="navigator">選單欄</div>
		</div>
		<br>
		<br>
		<br>
    	(div.text+br*10)*10
		<!-- 上面這一句意思是以下程式碼塊重複10遍,用上面的縮寫是為了在寫部落格時控制篇幅 
            <div class="text">文字內容</div>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
		-->
</body>

我們的選單欄(id="navigator")的div盒子,是在(id="header")的盒子內部

2.2 CSS 部分

<style type="text/css">
			
    body{
        padding: 0px;
        margin:0px;
    }

    #header{
        width:100%;
        /*background-color: lightblue;*/
    }

    #navigator, #navigator1{
        width:100%;
        background-color:gold; 
        text-align: center;
        height:150px;
        font:bold 75px/150px 'Microsoft Yahei';
        /*opacity: 0.5;*/
    }
    /*用於當navigator脫離文件流時,navigator1來進行填充原來的空位*/
    #navigator1{
        /*由於剛開始,navigator(即選單欄)沒有脫離文件流,所以先不展示navigator1*/
        display:none;
    }

    .else{
        width:100%;
        height:200px;
        background-color: green;
    }

    .text{
        text-align: center;
        font:bold 25px/25px 'Microsoft Yahei';
    }


</style>

由於"navigator1"部落格園自帶的html標籤沒有使用這個ID選擇器(因為這是我們自己新增的一個選擇器,為了當"navigator"脫離文件流時對原位置進行填充),所以我們需要下面的js程式碼來寫入一個div標籤,並且應用該ID選擇器。具體原因,請看下面的重難點詳解

2.3 JS 部分

<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
			
    $(function(){
		// 獲取header這個標籤元素
        var $header = $('#header');
        $header.html( $header.html() + '<div id="navigator1"></div>' );

        var $navigator = $('#navigator');
        var $navigator1 = $('#navigator1');

        $(window).scroll(function(){
            var $iNum = $(document).scrollTop();
            //監控頁面滾動距離,並顯示在標籤頁上
            // document.title = $iNum;  // 200 觸發事件
			
            // 200 非固定值,根據自己的需要修改,最好就是滾動到選單欄上邊沿時觸發
            if ( $iNum >= 200){
                /* 
                	當頁面滾動200px時,為navigator寫入樣式,使其固定定位到瀏覽器視窗上邊沿
                	此時會發生脫離文件流現象
                */
                $navigator.css({
                    'position':'fixed',
                    'top':0
                })
                // 相當於將navigator1的display的"none"改成"block" 
                $navigator1.show();

            }
            else{
                /*設定為未定位,返回文件流*/
                $navigator.css({
                    'position':'static'
                })
                // 設定回"none",即隱藏
                $navigator1.hide();
            }
        })

    })

</script>

由於部落格園原文件流當中沒有"<div id="navigator1"></div>"這一句,所以需要通過js寫入



三、重難點詳解

3.1 頁面內容跳變現象(脫離文件流)

3.1.1 動圖演示

你會發現~♪選單欄下面的“文件內容”這一行字會突然跳到選單欄三個大字中間,這就是我所說的所謂的跳變現象,那這是為什麼呢?

3.1.2 原因

如果你能看到這,答案相信已經很明瞭了,就是因為選單欄應用了固定定位以後,發生了脫離文件流現象,導致外面的盒子header的高度變小了,從而使得下面的內容自動往上排版,從而出現頁面內容跳變的現象。

3.1.3 解決方法

① 利用 js 獲取 header 元素,通過 xxx.html( ) 方法寫入"<div id="navigator1"></div>"

② 在CSS部分中,讓"navigator1"應用相同的樣式(保證佔據與選單欄相同的高度),並且先不展示(display:none;)

當"navigator"脫離文件流以後,讓"navigator1"展示出來,佔據(填充)原來"navigator"的位置,從而達到克服頁面跳變現象。

3.1.4 引入 "navigator1" 填充後動圖演示



四、總結與後言

整體設計思路也並不複雜,主要注意脫離文件流以後導致的跳變現象。由於可能每個部落格的樣式與具體html文件內容不同,所以博主我在這裡只提供了一個demo,大致的原理已經提及了。大家可以先通過demo自己研究一遍,再進行設計,畢竟自己設計的才是最符合自己心意的,並且能從中學到新知識。

博主還有其他幾篇關於部落格園裝飾的文章,可供觀看喲~

部落格園裝飾——(二)滾動到頁面頂部或底部

部落格園裝飾——(三)部落格園導航目錄(待更新)