欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript制作樓層導(dǎo)航效果流程詳解

 更新時(shí)間:2021年10月19日 15:30:27   作者:daixiangcn  
項(xiàng)目中遇到比較多的的文檔內(nèi)容,為了方便查找里面的小內(nèi)容,一般都會(huì)在左側(cè)或者右側(cè)放一個(gè)固定樓層的導(dǎo)航欄,今天就來(lái)說(shuō)一下這個(gè)固定樓層導(dǎo)航欄的思路以及實(shí)現(xiàn)的方法

本期目標(biāo)

使用JavaScript制作樓層導(dǎo)航效果,實(shí)現(xiàn)兩個(gè)功能:

  • 樓層跳轉(zhuǎn)
  • 樓層監(jiān)聽(tīng)

1. 功能實(shí)現(xiàn)

1.1 結(jié)構(gòu)層

<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 樓層跳轉(zhuǎn)

點(diǎn)擊左側(cè)菜單中的樓層按鈕對(duì)應(yīng)跳轉(zhuǎn)到相應(yīng)的樓層。

var oList = document.getElementById('left-list');
// 點(diǎn)擊事件委托
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 + ']');
        // 設(shè)置卷動(dòng)
        document.documentElement.scrollTop = contentPart.offsetTop;
    }
}

1.3.2 樓層監(jiān)聽(tīng)

樓層監(jiān)聽(tīng),頁(yè)面卷動(dòng)時(shí),左側(cè)菜單中的樓層欄目背景隨之變化。

// 頁(yè)面卷動(dòng)時(shí),左側(cè)盒子欄目背景隨之變化
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);
}
// 為了方便比較,追加無(wú)窮大
offsetTopArr.push(Infinity);
// 監(jiān)聽(tīng)卷動(dòng)
var nowFloor = -1;
window.onscroll = function (e) {
    var nowScrollTop = document.documentElement.scrollTop;
    // break的i值即為盒子數(shù)組下標(biāo)
    for (var i = 0; i < offsetTopArr.length; i++) {
        if (nowScrollTop >= offsetTopArr[i] && nowScrollTop < offsetTopArr[i + 1]) {
            break;
        }
    }
    // 樓層不等,進(jìn)行樣式更改
    if (nowFloor != i) {
        nowFloor = i;
        for (var j = 0; j < lis.length; j++) {
            if (j == i) {
                // 當(dāng)前樓層添加樣式
                lis[j].className = 'current';
            } else {
                // 去掉其他樓層的樣式
                lis[j].className = '';
            }
        }
    }
}

2. 效果預(yù)覽

在這里插入圖片描述

3. 項(xiàng)目代碼

點(diǎn)擊前往代碼倉(cāng)庫(kù),查看完整代碼。

到此這篇關(guān)于JavaScript制作樓層導(dǎo)航效果流程詳解的文章就介紹到這了,更多相關(guān)JavaScript 樓層導(dǎo)航內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • js控件Kindeditor實(shí)現(xiàn)圖片自動(dòng)上傳功能

    js控件Kindeditor實(shí)現(xiàn)圖片自動(dòng)上傳功能

    這篇文章主要為大家詳細(xì)介紹了js控件Kindeditor實(shí)現(xiàn)圖片自動(dòng)上傳功能的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 在百度搜索結(jié)果中去除掉一些網(wǎng)站的資料(通過(guò)js控制不讓顯示)

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

    這篇文章主要介紹了在百度搜索結(jié)果中去除掉一些網(wǎng)站的資料(通過(guò)js控制不讓顯示),需要的朋友可以參考下
    2017-05-05
  • 利用ES6的Promise.all實(shí)現(xiàn)至少請(qǐng)求多長(zhǎng)時(shí)間的實(shí)例

    利用ES6的Promise.all實(shí)現(xiàn)至少請(qǐng)求多長(zhǎng)時(shí)間的實(shí)例

    下面小編就為大家?guī)?lái)一篇利用ES6的Promise.all實(shí)現(xiàn)至少請(qǐng)求多長(zhǎng)時(shí)間的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 淺談js之字面量、對(duì)象字面量的訪問(wèn)、關(guān)鍵字in的用法

    淺談js之字面量、對(duì)象字面量的訪問(wèn)、關(guān)鍵字in的用法

    下面小編就為大家?guī)?lái)一篇淺談js之字面量、對(duì)象字面量的訪問(wèn)、關(guān)鍵字in的用法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • 第八篇Bootstrap下拉菜單實(shí)例代碼

    第八篇Bootstrap下拉菜單實(shí)例代碼

    這篇文章主要介紹了Bootstrap下拉菜單實(shí)例代碼的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • JavaScript中捕獲/阻止捕獲、冒泡/阻止冒泡方法

    JavaScript中捕獲/阻止捕獲、冒泡/阻止冒泡方法

    本篇文章主要介紹了JavaScript中捕獲/阻止捕獲、冒泡/阻止冒泡方法,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • 關(guān)于onchange事件在IE和FF下的表現(xiàn)及解決方法

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

    本篇文章主要是對(duì)關(guān)于onchange事件在IE和FF下的表現(xiàn)及解決方法進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-03-03
  • js使用循環(huán)清空某個(gè)div中的input標(biāo)簽值

    js使用循環(huán)清空某個(gè)div中的input標(biāo)簽值

    清空div中input標(biāo)簽值的方法有很多,下面為大家介紹下使用循環(huán)清空某個(gè)div中的input標(biāo)簽值的具體實(shí)現(xiàn)
    2014-09-09
  • 用Javascript來(lái)生成ftp腳本的小例子

    用Javascript來(lái)生成ftp腳本的小例子

    昨天閑著沒(méi)事,又因?yàn)楣ぷ餍枰?,?xiě)了一個(gè)腳本,用來(lái)做ftp。當(dāng)然不是直接做ftp,而是產(chǎn)生一個(gè)ftp的腳本,供ftp命令使用。
    2013-07-07
  • 最新評(píng)論