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 相关文章推荐
中文路径导致unitpngfix.js不正常的解决方法
Jun 26 Javascript
zTree插件之多选下拉菜单实例代码
Nov 06 Javascript
node.js中的console.timeEnd方法使用说明
Dec 09 Javascript
Javascript的闭包详解
Dec 26 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
Mar 30 Javascript
JavaScrip调试技巧之断点调试
Oct 22 Javascript
15个非常实用的JavaScript代码片段
Dec 18 Javascript
Vue中保存用户登录状态实例代码
Jun 07 Javascript
使用vue开发移动端管理后台的注意事项
Mar 07 Javascript
vue-loader中引入模板预处理器的实现
Sep 04 Javascript
vue 点击其他区域关闭自定义div操作
Jul 17 Javascript
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
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
MySQL数据源表结构图示
2008/06/05 PHP
php中JSON的使用与转换
2015/01/14 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
校园广播稿500字
2014/02/04 职场文书
实习单位鉴定评语
2014/04/26 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
公司股东出资证明书
2014/11/01 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
装修安全责任协议书
2016/03/22 职场文书
Java8中Stream的一些神操作
2021/11/02 Java/Android