JS实现导航栏楼层特效


Posted in Javascript onJanuary 01, 2020

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

知识点

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

运行效果

导航与界面实现互动

JS实现导航栏楼层特效

JS实现导航栏楼层特效

代码

<!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 id="ol">
    <li class="current">第1层</li>
    <li>第2层</li>
    <li>第3层</li>
    <li>第4层</li>
    <li>第5层</li>
  </ol>
  <!--楼层-->
  <ul id="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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript indexOf函数使用说明
Jul 03 Javascript
替代window.event.srcElement效果的可兼容性的函数
Dec 18 Javascript
js有关元素内容操作小结
Dec 20 Javascript
javascript的BOM汇总
Jul 16 Javascript
javascript解析xml实现省市县三级联动的方法
Jul 25 Javascript
全面理解闭包机制
Jul 11 Javascript
JS实现的缓冲运动效果示例
Apr 30 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
May 02 Javascript
详解node.js的http模块实例演示
Jul 12 Javascript
react实现换肤功能的示例代码
Aug 14 Javascript
vue动态删除从数据库倒入列表的某一条方法
Sep 29 Javascript
Javascript 模拟mvc实现点餐程序案例详解
Dec 24 Javascript
JS实现旋转木马轮播图
Jan 01 #Javascript
JS实现普通轮播图特效
Jan 01 #Javascript
javascript实现超好看的3D烟花特效
Jan 01 #Javascript
JavaScript工具库MyTools详解
Jan 01 #Javascript
javascript Canvas动态粒子连线
Jan 01 #Javascript
小程序新版订阅消息模板消息
Dec 31 #Javascript
小程序实现长按保存图片的方法
Dec 31 #Javascript
You might like
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
Python中的闭包实例详解
2014/08/29 Python
python修改注册表终止360进程实例
2014/10/13 Python
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
理解Python中的类与实例
2015/04/27 Python
带你了解python装饰器
2017/06/15 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
LODI女鞋在线商店:阿利坎特的鞋类品牌
2019/02/15 全球购物
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
大学生英语演讲稿
2014/04/24 职场文书
企业授权委托书范本
2014/09/22 职场文书
小学远程教育工作总结
2015/08/13 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis