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 二进制运算技巧解析
Nov 27 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
Oct 24 Javascript
node.js中的favicon.ico请求问题处理
Dec 15 Javascript
Jquery简单实现GridView行高亮的方法
Jun 15 Javascript
在JavaScript中访问字符串的子串
Jul 07 Javascript
ionic2 tabs使用 Modal底部tab弹出框
Dec 30 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
Apr 11 jQuery
利用angular、react和vue实现相同的面试题组件
Feb 19 Javascript
Vue 组件修改根实例的数据的方法
Apr 02 Javascript
详解在Angular4中使用ng2-baidu-map的方法
Jun 19 Javascript
基于vue-cli3和element实现登陆页面
Nov 13 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
Oct 29 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+xslt在windows平台上
2006/10/09 PHP
php处理json时中文问题的解决方法
2011/04/12 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
Javascript验证方法大全
2015/09/21 Javascript
详解Bootstrap插件
2016/04/25 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
给交警的表扬信
2014/01/12 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
特此通知格式
2015/04/27 职场文书
大学生入党自传2015
2015/06/26 职场文书
新闻通讯稿模板
2015/07/22 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js