当前位置 主页 > 网站技术 > 代码类 >

    JS实现导航栏楼层特效

    栏目:代码类 时间:2020-01-01 18:08

    本文实例为大家分享了JS实现导航栏楼层的具体代码,供大家参考,具体内容如下

    知识点

    1.多个事件有冲突的时候,需要设置flag判断是什么事件,进而进行后续操作。
    2.楼层效果就是判断scrollTop和offsetTop的关系
    3.引入工具库工具库

    运行效果

    导航与界面实现互动

    代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <style>
        *{margin: 0;padding: 0;list-style: none;border:0;}
        html, body, ul{width: 100%;height: 100%;}
        #ul li{
          width: 100%;
          height: 100%;
          text-align: center;
          font-size: 30px;
          /*background-color: red;*/
          color: #fff;
        }
    
        #ol{
          width: 80px;
          background-color: #ccc;
          position: fixed;
          left: 50px;
          top: 200px;
          border: 1px solid #fff;
        }
    
        #ol li{
          text-align: center;
          line-height: 30px;
          border-bottom: 1px solid #fff;
          color: #fff;
          cursor: pointer;
        }
    
        #ol li.current{
          background-color: orangered;
        }
      </style>
    </head>
    <body>
      <!--导航-->
      <ol >
        <li class="current">第1层</li>
        <li>第2层</li>
        <li>第3层</li>
        <li>第4层</li>
        <li>第5层</li>
      </ol>
      <!--楼层-->
      <ul >
        <li>第1层内容</li>
        <li>第2层内容</li>
        <li>第3层内容</li>
        <li>第4层内容</li>
        <li>第5层内容</li>
      </ul>
    
    <script src="../../00MyTools/MyTools.js"></script>
    <script>
      window.addEventListener('load', function (ev) {
         // 1. 获取标签
        var ol = myTool.$('ol'), ul = myTool.$('ul');
        var ulLis = ul.children;
        var olLis = ol.children;
    
        // 是否是点击产生的滚动
        var isClick = false;
    
        // 2. 上色
        var colorArr = ['red', 'green', 'blue', 'purple', 'yellow'];
        for (var i = 0; i < colorArr.length; i++) {
          ulLis[i].style.backgroundColor = colorArr[i];
        }
    
        // 3. 监听导航点击
        for (var j = 0; j < olLis.length; j++) {
          var olLi = olLis[j];
          (function (index) {
            olLi.addEventListener('click', function () {
              isClick = true;
              for (var i = 0; i < olLis.length; i++) {
                olLis[i].className = '';
              }
              this.className = 'current';
              // document.documentElement.scrollTop = index * myTool.client().height;
    
              myTool.slowMoving(document.documentElement, {'scrollTop': index * myTool.client().height}, function () {
                isClick = false;
              });
            });
          })(j)
        }
    
        // 4. 监听滚动
        var roll = 0;
        window.addEventListener('scroll', function (ev1) {
          if(!isClick){
            // 4.1 获取头部滚动偏移的高度
            roll = Math.ceil(Number(myTool.scroll().top));
    
            // 4.2 遍历
            for (var i = 0; i < ulLis.length; i++) {
              // 4.3 判断
              if(roll >= ulLis[i].offsetTop){
                for (var j = 0; j < olLis.length; j++) {
                  olLis[j].className = '';
                }
                olLis[i].className = 'current';
              }
            }
          }
        })
      });
    </script>
    </body>
    </html>