JavaScript制作楼层导航效果流程详解

 更新时间:2021年10月19日 15:30:27   作者:daixiangcn  
项目中遇到比较多的的文档内容,为了方便查找里面的小内容,一般都会在左侧或者右侧放一个固定楼层的导航栏,今天就来说一下这个固定楼层导航栏的思路以及实现的方法

本期目标

使用JavaScript制作楼层导航效果,实现两个功能:

  • 楼层跳转
  • 楼层监听

1. 功能实现

1.1 结构层

<div id="box" class="box">
    <ul class="list">
        <li class="content-part" data-n="栏目一">栏目一</li>
        <li class="content-part" data-n="栏目二">栏目二</li>
        <li class="content-part" data-n="栏目三">栏目三</li>
        <li class="content-part" data-n="栏目四">栏目四</li>
        <li class="content-part" data-n="栏目五">栏目五</li>
    </ul>
</div>
<div class="left">
    <ul id="left-list">
        <li data-n="栏目一">栏目一</li>
        <li data-n="栏目二">栏目二</li>
        <li data-n="栏目三">栏目三</li>
        <li data-n="栏目四">栏目四</li>
        <li data-n="栏目五">栏目五</li>
    </ul>
</div>

1.2 样式层

<style>
    * {
        margin: 0;
        padding: 0;
    }
    body .box {
        width: 1200px;
    }
    body .box {
        margin: 0 auto;
    }
    ul {
        list-style: none;
    }
    body .box ul li {
        height: 800px;
        background-color: silver;
        margin-bottom: 20px;
        font-size: 30px;
        font-weight: bold;
    }
    body .left {
        position: fixed;
        left: 20px;
        bottom: 100px;
        width: 100px;
        height: 250px;
        top: 50%;
        margin-top: -125px;
        background-color: silver;
    }
    body .left ul li {
        height: 50px;
        line-height: 50px;
        text-align: center;
        cursor: pointer;
    }
    body .current {
        color: #fff;
        background-color: tomato;
    }
</style>

1.3 行为层

1.3.1 楼层跳转

点击左侧菜单中的楼层按钮对应跳转到相应的楼层。

var oList = document.getElementById('left-list');
// 点击事件委托
oList.onclick = function (e) {
    if (e.target.tagName.toLowerCase() == 'li') {
        // 取data-n值
        var n = e.target.getAttribute('data-n');
        // []属性选择器
        var contentPart = document.querySelector('.content-part[data-n=' + n + ']');
        // 设置卷动
        document.documentElement.scrollTop = contentPart.offsetTop;
    }
}

1.3.2 楼层监听

楼层监听,页面卷动时,左侧菜单中的楼层栏目背景随之变化。

// 页面卷动时,左侧盒子栏目背景随之变化
var contents = document.querySelectorAll('.content-part');
var lis = document.querySelectorAll('#left-list li');
var offsetTopArr = [];
for (var i = 0; i < contents.length; i++) {
    offsetTopArr.push(contents[i].offsetTop);
}
// 为了方便比较,追加无穷大
offsetTopArr.push(Infinity);
// 监听卷动
var nowFloor = -1;
window.onscroll = function (e) {
    var nowScrollTop = document.documentElement.scrollTop;
    // break的i值即为盒子数组下标
    for (var i = 0; i < offsetTopArr.length; i++) {
        if (nowScrollTop >= offsetTopArr[i] && nowScrollTop < offsetTopArr[i + 1]) {
            break;
        }
    }
    // 楼层不等,进行样式更改
    if (nowFloor != i) {
        nowFloor = i;
        for (var j = 0; j < lis.length; j++) {
            if (j == i) {
                // 当前楼层添加样式
                lis[j].className = 'current';
            } else {
                // 去掉其他楼层的样式
                lis[j].className = '';
            }
        }
    }
}

2. 效果预览

在这里插入图片描述

3. 项目代码

点击前往代码仓库,查看完整代码。

到此这篇关于JavaScript制作楼层导航效果流程详解的文章就介绍到这了,更多相关JavaScript 楼层导航内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js 性能优化之快速响应的用户界面

    js 性能优化之快速响应的用户界面

    本文主要介绍了js性能优化的快速响应的用户界面。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 原生js和jquery中有关透明度设置的相关问题

    原生js和jquery中有关透明度设置的相关问题

    设置透明度问题,比如图片的淡入淡出效果。下面我介绍一下在原生js和jQuery中设置透明度的相关问题和注意点
    2014-01-01
  • 浅谈layui 表单元素的选中问题

    浅谈layui 表单元素的选中问题

    今天小编就为大家分享一篇浅谈layui 表单元素的选中问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 关于ES6字符串的扩展详解

    关于ES6字符串的扩展详解

    es6这个String对象倒是扩展了不少方法,但是很多都是跟字符编码相关,下面这篇文章主要给大家介绍了关于ES6字符串扩展的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • javascript实现保留两位小数的多种方法

    javascript实现保留两位小数的多种方法

    这篇文章主要介绍了javascript实现保留两位小数的多种方法,如果数字的原本小数位数不到两位,那么缺少的就自动补零,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 使用requestAnimationFrame实现js动画性能好

    使用requestAnimationFrame实现js动画性能好

    requestAnimationFrame优于setTimeout/setInterval的地方在于它是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态下的话,动画会自动暂停,有效节省了CPU开销,这篇文章给大家详细介绍使用requestAnimationFrame实现js动画
    2015-08-08
  • Javascript前端事件循环机制详细讲解

    Javascript前端事件循环机制详细讲解

    单线程的同步等待极大影响效率,任务不得不一个一个等待执行,对于网页应用是无法接受的。所以Javascript使用事件循环机制来解决异步任务的问题。本文就来讲讲Javascript的事件循环机制,希望对你有所帮助
    2022-12-12
  • 深入理解JavaScript是如何实现继承的

    深入理解JavaScript是如何实现继承的

    这篇文章主要介绍了JavaScript是如何实现继承的,有需要的朋友可以参考一下
    2013-12-12
  • webpack打包html里面img后src为“[object Module]”问题

    webpack打包html里面img后src为“[object Module]”问题

    这篇文章主要介绍了webpack打包html里面img后src为“[object Module]”问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Javascript Promise用法详解

    Javascript Promise用法详解

    这篇文章主要介绍了Javascript Promise用法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05

最新评论