單頁(yè)面網(wǎng)頁(yè)內(nèi)容較多,頁(yè)面長(zhǎng)度較大,需要方便快速的在頁(yè)面的不同位置進(jìn)行定位,所以浮動(dòng)菜單逐漸流行了起來(lái),如下圖 男裝、女裝、美妝等。
這種菜單功能分為兩部分:
1、點(diǎn)擊菜單項(xiàng),網(wǎng)頁(yè)滾動(dòng)到對(duì)應(yīng)位置,可簡(jiǎn)單通過錨點(diǎn)實(shí)現(xiàn);
2、滾動(dòng)頁(yè)面的時(shí)候,菜單項(xiàng)的選中狀態(tài)要跟著改變,這就需要監(jiān)聽網(wǎng)頁(yè)的滾動(dòng)事件并通過一點(diǎn)計(jì)算來(lái)實(shí)現(xiàn)了;
計(jì)算 scrollTop 和 各個(gè) div 的 offsetTop 的大小關(guān)系,判斷現(xiàn)在網(wǎng)頁(yè)顯示的位置在什么地方,再根據(jù)計(jì)算的結(jié)果給對(duì)應(yīng)的菜單項(xiàng)添加樣式。比如第二個(gè) div 的 offset().top = 300, 第三個(gè) div 的offset().top = 600,此時(shí)的 scrollTop = 400,說(shuō)明現(xiàn)在顯示的大部分是第二個(gè) div 的位置,700 則是第三個(gè) div。下面是一個(gè)簡(jiǎn)單的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
< div id = "menu" > < ul > < li >< a href = "#item1" class = "current" >1F 男裝</ a ></ li > < li >< a href = "#item2" >2F 女裝</ a ></ li > < li >< a href = "#item3" >3F 美妝</ a ></ li > < li >< a href = "#item4" >4F 數(shù)碼</ a ></ li > < li >< a href = "#item5" >5F 母嬰</ a ></ li > </ ul > </ div > < div id = "content" > < h1 >網(wǎng)購(gòu)</ h1 > < div id = "item1" class = "item" > < h2 >1F 男裝</ h2 > < ul > < li >< a href = "#" >< img src = "" alt = "" /></ a ></ li > <!-- 若干個(gè)li --> </ ul > </ div > <!-- 若干個(gè)item--> </ div > |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
* { margin : 0 ; padding : 0 ;} body { font-size : 12px ; line-height : 1.7 ;} li { list-style : none ;} #content { width : 800px ; margin : 0 auto ; padding : 20px ;} #content h 1 { color : #0088bb ;} #content .item { padding : 20px ; margin-bottom : 20px ; border : 1px dotted #0088bb ;} #content .item h 2 { font-size : 16px ; font-weight : bold ; border-bottom : 2px solid #0088bb ; margin-bottom : 10px ;} #content .item li { display : inline ; margin-right : 10px ;} #content .item li a img { width : 230px ; height : 230px ; border : none ;} #menu{ position : fixed ; left : 50% ; margin-left : 400px ; top : 100px ;} #menu ul li a { display : block ; margin : 5px 0 ; font-size : 14px ; font-weight : bold ; color : #333 ; width : 80px ; height : 50px ; line-height : 50px ; text-decoration : none ; text-align : center ; } #menu ul li a:hover,#menu ul li a.current { color : #fff ; background : #0088bb ;} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
$( function (){ $(window).scroll( function (){ var scrollTop = $(document).scrollTop(); var contentItems = $( "#content" ).find( ".item" ); var currentItem = "" ; contentItems.each( function (){ var contentItem = $( this ); var offsetTop = contentItem.offset().top; if (scrollTop > offsetTop-200){ //此處的200視具體情況自行設(shè)定,因?yàn)槿绻粶p去一個(gè)數(shù)值,在剛好滾動(dòng)到一個(gè)div的邊緣時(shí),菜單的選中狀態(tài)會(huì)出錯(cuò),比如,頁(yè)面剛好滾動(dòng)到第一個(gè)div的底部的時(shí)候,頁(yè)面已經(jīng)顯示出第二個(gè)div,而菜單中還是第一個(gè)選項(xiàng)處于選中狀態(tài) currentItem = "#" + contentItem.attr( "id" ); } }); if (currentItem&¤tItem!=$( "#menu" ).find( ".current" ).attr( "href" )){ $( "#menu" ).find( ".current" ).removeClass( "current" ); $( "#menu" ).find( "[href=" + currentItem + "]" ).addClass( "current" ); } }); }); |