JavaScript制作樓層導航效果流程詳解
本期目標
使用JavaScript制作樓層導航效果,實現(xiàn)兩個功能:
- 樓層跳轉
- 樓層監(jiān)聽
1. 功能實現(xiàn)
1.1 結構層
<div id="box" class="box"> <ul class="list"> <li class="content-part" data-n="欄目一">欄目一</li> <li class="content-part" data-n="欄目二">欄目二</li> <li class="content-part" data-n="欄目三">欄目三</li> <li class="content-part" data-n="欄目四">欄目四</li> <li class="content-part" data-n="欄目五">欄目五</li> </ul> </div> <div class="left"> <ul id="left-list"> <li data-n="欄目一">欄目一</li> <li data-n="欄目二">欄目二</li> <li data-n="欄目三">欄目三</li> <li data-n="欄目四">欄目四</li> <li data-n="欄目五">欄目五</li> </ul> </div>
1.2 樣式層
<style> * { margin: 0; padding: 0; } body .box { width: 1200px; } body .box { margin: 0 auto; } ul { list-style: none; } body .box ul li { height: 800px; background-color: silver; margin-bottom: 20px; font-size: 30px; font-weight: bold; } body .left { position: fixed; left: 20px; bottom: 100px; width: 100px; height: 250px; top: 50%; margin-top: -125px; background-color: silver; } body .left ul li { height: 50px; line-height: 50px; text-align: center; cursor: pointer; } body .current { color: #fff; background-color: tomato; } </style>
1.3 行為層
1.3.1 樓層跳轉
點擊左側菜單中的樓層按鈕對應跳轉到相應的樓層。
var oList = document.getElementById('left-list'); // 點擊事件委托 oList.onclick = function (e) { if (e.target.tagName.toLowerCase() == 'li') { // 取data-n值 var n = e.target.getAttribute('data-n'); // []屬性選擇器 var contentPart = document.querySelector('.content-part[data-n=' + n + ']'); // 設置卷動 document.documentElement.scrollTop = contentPart.offsetTop; } }
1.3.2 樓層監(jiān)聽
樓層監(jiān)聽,頁面卷動時,左側菜單中的樓層欄目背景隨之變化。
// 頁面卷動時,左側盒子欄目背景隨之變化 var contents = document.querySelectorAll('.content-part'); var lis = document.querySelectorAll('#left-list li'); var offsetTopArr = []; for (var i = 0; i < contents.length; i++) { offsetTopArr.push(contents[i].offsetTop); } // 為了方便比較,追加無窮大 offsetTopArr.push(Infinity); // 監(jiān)聽卷動 var nowFloor = -1; window.onscroll = function (e) { var nowScrollTop = document.documentElement.scrollTop; // break的i值即為盒子數(shù)組下標 for (var i = 0; i < offsetTopArr.length; i++) { if (nowScrollTop >= offsetTopArr[i] && nowScrollTop < offsetTopArr[i + 1]) { break; } } // 樓層不等,進行樣式更改 if (nowFloor != i) { nowFloor = i; for (var j = 0; j < lis.length; j++) { if (j == i) { // 當前樓層添加樣式 lis[j].className = 'current'; } else { // 去掉其他樓層的樣式 lis[j].className = ''; } } } }
2. 效果預覽
3. 項目代碼
點擊前往代碼倉庫,查看完整代碼。
到此這篇關于JavaScript制作樓層導航效果流程詳解的文章就介紹到這了,更多相關JavaScript 樓層導航內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章

js控件Kindeditor實現(xiàn)圖片自動上傳功能

在百度搜索結果中去除掉一些網(wǎng)站的資料(通過js控制不讓顯示)

利用ES6的Promise.all實現(xiàn)至少請求多長時間的實例

關于onchange事件在IE和FF下的表現(xiàn)及解決方法