側欄懸浮導航選單拖動滾動條可以自動定位效果
本章節分享一段非常實用的導航選單,它實現了多種比較人性化的導航功能。
(1).實現了側欄懸浮效果。
(2).側欄導航能夠實現隱藏摺疊效果。
(3).拖動滾動條的時候,能夠實現自動定位效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> ul{list-style-type: none;} a{text-decoration: none;} /*文章內容區*/ #content{ width:400px; height:3000px; margin:0 auto; font-size:2em; } #content p{ height:400px; text-align:center; line-height:400px; background:#CCC; } /*懸浮選單*/ .menu{ position:fixed; top:20%; right:0; width:200px; border:1px solid gray; border-radius:5px; } .menu li{ height:2em; line-height:2em; } .red{color:red;} .hide{display:none;} /*隱藏懸浮選單*/ .slideIn{ transform:translate3d(202px, 0, 0); transition-duration:.5s; } /*顯示懸浮選單*/ .slideOut{ transform:translate3d(0, 0, 0); transition-duration:.5s; } .static{ color:#007aff; text-align:center; } /*顯示懸浮球*/ .toShow{ display:block; width:4.8em; height:2em; line-height:2em; border-radius:.5em; border:1px solid gray; transform:translate3d(-5em, 0, 0); transition-duration:1s; } </style> <script> function done(doc){ var pos = [], links = doc.getElementsByTagName('a'), titles = doc.getElementsByTagName('h1'), menu = doc.getElementById('menubar'), currentItem=null; var addClass = function (element){ currentItem && currentItem.removeAttribute('class'); element.setAttribute('class','red'); currentItem = element; }, getScrollTop = function (){ return Math.ceil(document.documentElement.scrollTop||document.body.scrollTop)+1; }, startScroll = function (){ var scrollTop = getScrollTop(), len = titles.length, index = 0; if(scrollTop>=0 && scrollTop<pos[0]){ addClass(links[0]); return; } if(scrollTop>=pos[len-1]){ addClass(links[len-1]); return; } for(;index<len;index++){ if(scrollTop > pos[index] && scrollTop < pos[index+1]){ addClass(links[index]); break; } } }; menu.onclick=function(e){ var e=window.event||e var target = e.target || e.srcElement; if(target.nodeName.toLowerCase() === 'a'){ addClass(target); return; } if(target.nodeName.toLowerCase() === 'p'){ if(target.className == 'static'){ this.className = 'menu slideIn'; setTimeout(function(){ target.className = 'static toShow'; target.innerHTML = '顯示'; },1000); }else{ target.className = 'static'; target.innerHTML = '隱藏'; this.className = 'menu slideOut'; } } } var ln = titles.length; while(--ln>-1){ pos.unshift(titles[ln].offsetTop); } startScroll(); window.onscroll = function(){ startScroll() } } window.onload=function(){ done(document) } </script> </head> <body> <div id="show"></div> <div id="content"> <h1 id="div">div教程</h1> <p>div教程</p> <h1 id="css">css教程</h1> <p>css教程</p> <h1 id="antzone">螞蟻部落</h1> <p>螞蟻部落</p> <h1 id="json">json教程</h1> <p>json教程</p> </div> <div class="menu" id="menubar"> <p class="static">隱藏</p> <ul> <li><a href="#div">div教程</a></li> <li><a href="#css">css教程</a></li> <li><a href="#antzone">螞蟻部落</a></li> <li><a href="#json">json教程</a></li> </ul> </div> </body> </html>
上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。
一.實現原理:
(1).關於側欄懸浮功能:
這是就是給menubar設定position:fixed定位,然後設定相應的left和right值即可。
(2).關於隱藏和顯示功能:
非常的簡單,就是通過javascript動態的方式為導航指定的元素新增相應的class類,css程式碼是用過css3方式實現的。
(3).自動定位效果:
此效果是通過計算上滾的距離和標題距離頂部的距離進行相關判斷實現的,如果在指定的區間,那麼就設定相應的側欄導航選單的對應的導航欄目的字型顏色為紅色。
二.程式碼註釋:
(1).function done(doc){},此方法實現了導航選單效果,引數是document物件。
(2).var pos = [],宣告一個空陣列,用來存放內容<h1>距離文件頂部的距離。
(3).links = doc.getElementsByTagName('a'),獲取文件中的連結<a>元素,當然這裡只有側欄導航選單才有<a>元素,如果實際應用中其他地方也有<a>元素,那麼可以更精確的控制獲取<a>的上下文。
(4).titles = doc.getElementsByTagName('h1'),和上面是一樣的道理,獲取<h1>元素集合。
(5).menu = doc.getElementById('menubar'),獲取導航選單物件。
(6).currentItem=null,宣告一個變數並賦初值為null,用來存放當前的連結<a>元素。
(7).var addClass = function (element){
currentItem && currentItem.removeAttribute('class');
element.setAttribute('class','red');
currentItem = element;
},此方法可以實現將當前所在的導航連結<a>字型顏色設定為紅色,並將之前為紅色的連結<a>恢復原貌。
(8).getScrollTop = function (){
return Math.ceil(document.documentElement.scrollTop||document.body.scrollTop)+1;
},此方法可以獲取頁面向上滾動的距離,當然略有差距,因為進行了加1和數字轉換操作。
(9).startScroll = function (){},此方法實現了拖動滾動條實現導航自動定位功能。
(10).var scrollTop = getScrollTop(),獲取頁面向上滾動的距離。
(11).len = titles.length,獲取<h1>的數量。
(12).index = 0,宣告一個變數並賦值為0,用來遍歷迴圈中使用。
(13).if(scrollTop>=0 && scrollTop<pos[0]){
addClass(links[0]);
return;
},如果向上滾動的距離大約等於0小於第一個<h1>距離頁面頂端的距離,那麼側欄導航選單的第一個<a>字型顏色設定為紅色。
(14).if(scrollTop>=pos[len-1]){
addClass(links[len-1]);
return;
},如果向上滾動的距離,大於最後一個<h1>距離頂部的距離,那麼就將側欄導航選單的最後一個<a>字型顏色設定為紅色。
(15).for(;index<len;index++){
if(scrollTop > pos[index] && scrollTop < pos[index+1]){
addClass(links[index]);
break;
}
},此迴圈語句是用來設定側欄導航選單哪一個連結<a>的字型顏色應該是紅色。
(16). menu.onclick=function(e){},此側欄導航註冊click事件處理函式。
(17).var e=window.event||e,獲取相容所有瀏覽器的事件物件。(18).var target = e.target || e.srcElement,獲取相容所有瀏覽器的事件源物件。
(19).if(target.nodeName.toLowerCase() === 'a'){
addClass(target);
return;
},將當前點選的連結a字型顏色設定為紅色。
(20).if(target.nodeName.toLowerCase() === 'p'){
if(target.className == 'static'){
this.className = 'menu slideIn';
setTimeout(function(){
target.className = 'static toShow';
target.innerHTML = '顯示';
},1000);
}else{
target.className = 'static';
target.innerHTML = '隱藏';
this.className = 'menu slideOut';
}
}實現了側欄導航選單的顯示和隱藏效果。
(21).var ln = titles.length,獲取<h1>元素的數目。
(22).while(--ln>-1){
pos.unshift(titles[ln].offsetTop);
},將所有的<h1>元素距離頁面頂部的距離存入陣列。
(23).startScroll(),執行此函式。
(24).window.onscroll = function(){
startScroll()
},拖動滾動條的時候,能夠實現導航選單自動定位效果。
三.相關閱讀:
(1).transform可以參閱CSS3 transform一章節。
(2).removeAttribute()方法可以參閱removeAttribute()一章節。
(3).setAttribute()方法可以參閱setAttribute()一章節。
(4).Math.ceil()可以參閱javascript Math.ceil()一章節。
(5).document.documentElement.scrollTop||document.body.scrollTop參閱document.documentElement.scrollTop瀏覽器相容。
(6).scrollTop屬性可以參閱scrollTop一章節。
(7).var e=window.event||e可以參閱var ev=window.event||ev的作用是什麼一章節。
(8).target可以參閱javascript event.target一章節。
(9).srcElement屬性可以參閱javascript event.srcElement一章節。
(10).className屬性可以參閱javascript className一章節。
(11).unshift()方法可以參閱javascript unshift()一章節。
(12).onscroll事件可以參閱javascript scroll 事件一章節。
相關文章
- 拖動滾動條實現側欄導航定位效果
- 側欄導航自動定位效果詳解
- 拖動滾動條一定距離可以固定於頂部的導航欄
- 實現隨著滾動條滾動,導航會自動切換的效果
- JavaScript滑鼠懸浮展開側欄導航JavaScript
- 拖動滾動條實現內容自動載入效果
- css3滑鼠懸浮背景滑動導航選單CSSS3
- Ubuntu 20.04 自動隱藏左側導航欄Ubuntu
- 滑鼠懸浮可以上下伸縮的導航選單
- 滑鼠懸浮底部有橫條伸展的導航選單
- 如何讓 fixed 定位的導航條可橫向滾動?
- JavaScript實現HTML導航欄下拉選單[懸浮顯示]JavaScriptHTML
- 滑鼠懸浮具有背景動畫跟隨效果的導航選單動畫
- CSS3 滑鼠懸浮立體翻滾的導航選單CSSS3
- 側欄能夠定位的導航選單程式碼例項
- 線上直播原始碼,JS動態效果之,側邊欄滾動固定效果原始碼JS
- 直播原始碼,懸浮窗滾動漸變色效果原始碼
- 帶有視覺滾動差的選單側滑欄視覺
- 滑鼠懸浮背景變色導航選單
- 高度塌陷 解決高度塌陷 導航條 清除浮動 相對定位
- 拖動滾動條實現div跟隨效果程式碼例項
- 隱藏滾動條保留滾動效果
- css3水平滑動導航選單效果CSSS3
- 滾動cell 顯示隱藏導航欄
- 移動端觸屏拖動頁面滾動效果
- 微信小程式懸浮可拖動客服元件微信小程式元件
- JS如何實現導航欄的智慧浮動JS
- css隱藏滾動條並可以滾動CSS
- 網頁導航欄滑鼠移上去自動彈出下拉選單網頁
- CSS 動態導航選單CSS
- jQuery滑動導航選單jQuery
- JavaScript 滾動條定位指定位置JavaScript
- 下拉選單框和滾動條
- 在 Flutter 中實現一個浮動導航欄Flutter
- CSS浮動float的導航欄小案例總結CSS
- CSS如何讓浮動導航欄元素居中顯示CSS
- jQuery寫的文章內容頁右側浮動滾動jQuery
- 按鈕滾動條效果