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 变量作用域 代码分析
Jun 26 Javascript
Jquery实现视频播放页面的关灯开灯效果
May 27 Javascript
Web表单提交之disabled问题js解决方法
Jan 13 Javascript
js实现拖拽效果
Feb 12 Javascript
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
JS延时提示框实现方法详解
Nov 26 Javascript
JS简单获取当前年月日星期的方法示例
Feb 07 Javascript
JS实现含有中文字符串的友好截取功能分析
Mar 13 Javascript
AngularJS service之select下拉菜单效果
Jul 28 Javascript
详解使用angular的HttpClient搭配rxjs
Sep 01 Javascript
JS实现瀑布流布局
Oct 21 Javascript
简单谈谈javascript高级特性
Sep 04 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 组件化编程技巧
2009/06/06 PHP
php之XML转数组函数的详解
2013/06/07 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
2017/07/26 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
详解Python 正则表达式模块
2018/11/05 Python
python requests证书问题解决
2019/09/05 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
英国自行车商店:AW Cycles
2021/02/24 全球购物
关于奉献的演讲稿
2014/05/21 职场文书
艾滋病宣传标语
2014/06/25 职场文书
材料化学专业求职信
2014/07/15 职场文书
关于美容院的活动方案
2014/08/14 职场文书
宾馆客房管理制度
2015/08/06 职场文书
反邪教教育心得体会
2016/01/15 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang
apache ftpserver搭建ftp服务器
2022/05/20 Servers
git stash(储藏)的用法总结
2022/06/25 Servers