切换导航楼层案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>

        *{
            margin: 0;
            padding: 0;
        }
 
        .content-part {
            width: 1000px;
            margin: 0 auto;
            margin-bottom: 30px;
            background-color: #ccc;
            font-size: 50px;
        }

        .floornav{
            position: fixed;
            right: 40px;
            top: 50%;
            margin-top: -100px;
            width: 120px;
            height: 200px;
            background-color: orange;
        }
 
        .floornav ul {
            list-style: none;
        }

        .floornav ul li {
            width: 120px;
            height: 40px;
            line-height:40px;
            text-align: center;
            font-size: 26px;
            cursor: pointer;
        }

        .floornav ul li.current{
            background-color: purple;
            color: white;
        }

    </style>
</head>
<body>

    <nav class="floornav">
        <ul id="list">
            <li data-n="科技" class="current">科技</li>
            <li data-n="体育">体育</li>
            <li data-n="新闻">新闻</li>
            <li data-n="娱乐">娱乐</li>
            <li data-n="视频">视频</li>
        </ul>
    </nav>
   
    <section class="content-part" style="height: 674px;" data-n="科技">
        科技栏目
    </section>

    <section class="content-part" style="height: 567px;" data-n="体育">
        体育栏目
    </section>

    <section class="content-part" style="height: 739px;" data-n="新闻">
        新闻栏目
    </section>

    <section class="content-part" style="height: 274px;" data-n="娱乐">
        娱乐栏目
    </section>

    <section class="content-part" style="height: 894px;" data-n="视频">
        视频栏目
    </section>

    <div  id="box">
        <p id="para"></p>    
    </div>

     <script>
         // 使用 事件委托 给li 添加监听
        var list = document.getElementById('list')
        var contentParts = document.querySelectorAll('.content-part')
        var lis = document.querySelectorAll('#list li ')

        list.onclick = function(e){
            if(e.target.tagName.toLowerCase() == 'li'){
                var n = e.target.getAttribute('data-n')  
                var contentPart = document.querySelector('.content-part[data-n=' + n + ']');  
                document.documentElement.scrollTop = contentPart.offsetTop

            }
        }

        // 在页面 加载好之后  获取 content-part 盒子的 offsetTop 值推入数组
        var offsetTopArr = []
     

        for(var i=0;i<contentParts.length;i++){
            offsetTopArr.push(contentParts[i].offsetTop)
        }

        //为了方便 比较 推入一个 无穷大
         offsetTopArr.push(Infinity)

        // console.log(offsetTopArr);  [30, 734, 1331, 2100, 2404]

        // 当前所在楼层
        var nowfloor = -1

        // 窗口的 滚动
        window.onscroll = function(){
            var scrollTop = document.documentElement.scrollTop;
            // 遍历数组 看看 当前在哪两个楼层之间
            for(var i=0;i<offsetTopArr.length;i++){
                if(scrollTop >= offsetTopArr[i] && scrollTop <   offsetTopArr[i+1]){
                    break;
                }
            }
             
            // 退出循环的时候 i 是几  就表示 当前 楼层 是几
            // 如果当前所在楼层 不是 i  表示 换楼了
            if(nowfloor != i){
                // 改变楼层号
                nowfloor = i

                // 设置 下标 为 i 的项 有 cur
                for(var j = 0; j < lis.length;j++){
                    if(j==i){
                        lis[j].className = 'current'
                    }else{
                        lis[j].className = ''
                    }
                }

               
            }
           
        }

     </script>
</body>
</html>
posted @ 2021-12-11 15:02  13522679763-任国强  阅读(40)  评论(0)    收藏  举报