壹 ❀ 引言

对于楼层导航而言,还有个重要的功能就是,随着滚动条滚动,达到某层时得同步点亮楼层导航的小图片。

由于我前面也说了不打算使用JQ,所以想着用JS去实现它,实现并不难,主要得弄清滚动满足怎样的条件才应该点亮对应楼层,我们先看看实现效果:

贰 ❀ 实现思路

第一点,因为是由滚动触发的楼层判断,所以肯定离不开onscroll事件。

第二点,我们貌似要获取每个楼层顶端距离视窗顶部的距离,随着滚动条往下滚动,此距离会不断缩小,当接近到某个距离时我们判定此楼层入画,当然其它楼层都满足此判定。

而JQ提供了一个offset().top方法能获取这个值,js中只有一个offsetTop属性,获取的是距离自己最近position属性为非static的祖先元素的距离,此距离不随滚动条滚动而缩小。

当然我们有方法模拟计算出offset().top的值,但没必要

这里我直接引用了我之前博客得到的结论:offset().top =offsetTop -scrollTop(offsetTop参考对象为根元素)。

为了方便理解,我们假设楼层壹顶端距离视窗顶端为0时,此时判定楼层壹入画,即楼层导航中第一个按钮应该被点亮。

由于offset().top = offsetTop - scrollTop,此时楼层壹距离顶端已经为0,我们可以得出当楼层壹的offsetTop = scrollTop时,我们认定楼层壹入画。

而当楼层贰入画时,楼层贰的offsetTop也等于滚动条的距离,此时楼层壹自然会出画:

那么现在我们得到了判断楼层入画的条件,如果某个楼层的offsetTop属性的值小于等于滚动条距离时(如果用等于条件过于苛刻,很难刚好滚动到这个距离点上),我们点亮对应楼层的导航logo。

为了让效果更加自然,我们肯定不会真的让某个楼层紧贴顶部时才判定它满足条件,肯定是提前某个距离就判定满足,所以真正的条件应该是offsetTop - 100(这个数字看自己感觉) <= scrollTop

你是否会有,楼层贰入画时楼层壹依然满足offsetTop<=scrollTop条件的疑惑?在JQ里面,我们给某个元素添加点亮class的同时,还会清除掉兄弟元素的该class。

所以在JS里面也是如此,我们利用满足楼层的索引来控制样式,而后者满足条件的索引始终会覆盖前面的索引,所以被点亮的永远只有一个。

现在弄懂了思路,代码就好些了,下面直接贴上了实现代码:

叁 ❀ 实现代码

HTML部分:

CSS部分:

* {

padding: 0;

margin: 0;

list-style: none;

}

.floor>div {

height: 900px;

line-height: 900px;

text-align: center;

color: #fff;

font-size: 40px;

}

.floorNav {

width: 40px;

height: 200px;

position: fixed;

right: 0;

top: 0;

bottom: 0;

margin: auto;

background: #ddd;

}

.floorNav>li {

height: 40px;

line-height: 40px;

text-align: center;

color: #fff;

}

.active {

background: #e4393c;

color: #fff;

}

JS部分:

//获取楼层

let floors = document.querySelectorAll(".floor>div");

//获取楼层导航

let floorNavs = document.querySelectorAll(".floorNav>li");

//滚动监听

window.onscroll = function () {

//获取滚动条高度,兼容ie

let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

//符合点亮条件的楼层索引

let activeIndex;

//楼层导航图标点亮控制

floors.forEach((floor, index) => {

//检查各楼层顶端距离视窗顶端距离,如果满足条件则修改楼层图标

floor.offsetTop - 100 <= scrollTop ? activeIndex = index : null;

});

//根据索引数设置楼层样式

floorNavs.forEach((nav, index) => {

index === activeIndex ? nav.classList.add('active') : nav.classList.remove('active');

});

};

需要注意的是,这里我使用了js中操作classList对象的add方法与remove方法,这两个方法IE并不支持,因为我这边是不需要考虑IE的,所以就任性了。

本文只是提供了一个楼层导航的思路,实现肯定不是很好,若有更佳的做法,欢迎留言讨论,那么本文结束。

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

用java实现楼层导航_JS实现网站楼层导航效果代码实例相关推荐

  1. java实现分发_关于JAVA中事件分发和监听机制实现的代码实例

    [实例简介] 关于JAVA中事件分发和监听机制实现的代码实例,绝对实用代码,有说明. [实例截图] [核心代码] JavaEventDispatch ├── bin │   └── com │   └ ...

  2. 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用

    转载:http://blog.csdn.net/5iasp/article/details/37054171 谢谢博主 ======================================== ...

  3. cpu java poi 导出_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  4. java 控制台输出时间_Java获取时间打印到控制台代码实例

    这篇文章主要介绍了Java获取时间打印到控制台代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 面试时有一道面试题:要求获取当时时间,并像电子 ...

  5. java自动生成生成java透视表_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  6. java excel 透视_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  7. Java Web的Struts2的多语种网站的多语言切换实例

    先看图图: 图1: 图2: 图3: 图4: 一 首先下载Properties Editor插件,该插件是支持中文的资源文件编辑器:MyEclipse 10.6 以上不用安装该插件,使用自带资源文件编辑 ...

  8. java nginx 例子_Java及nginx实现文件权限控制代码实例

    我们知道,使用nginx作为文件下载服务器,可以极大地降低对后端Java服务器的负载冲击,但是nginx本身并不提供授权控制,因此好的方案是由后端服务器实现权限控制,最好的方式是直接复用应用的认证体系 ...

  9. java timer demo_java中任务调度java.util.Timer,ScheduledExecutor,Quartz的机制说明和demo代码实例分享...

    目前的 Web 应用,多数应用都具备任务调度的功能.这里就简单的介绍任务调度的Java 实现方法,主要包括 Timer,Scheduler, Quartz 以及 JCron Tab,目的在于给需要开发 ...

最新文章

  1. 如何创建可扩展表视图中的iOS 学习和拓展优化(有待更新)
  2. 深度去雨--Deep Joint Rain Detection and Removal from a Single Image
  3. .NET 调用JS:WebBrowser.Document.InvokeScript 方法抛出“指定的转换无效”异常的原因
  4. CentOS 6.3编译安装Nginx1.2.2+MySQL5.5.25a+PHP5.4.5
  5. 日常打卡:平淡无奇的一天
  6. Vue.js 笔记之 img src
  7. java上传文件以流方式判断类型
  8. 聊一聊如何在.NET Core中使用Nacos 2.0
  9. 不止代码:恐狼后卫(ybtoj-区间dp)
  10. random_state ---summary
  11. 诗与远方:无题(七十四)
  12. Maven创建servlet项目演示(三)
  13. 美国政府召开网络安全峰会,与私营行业巨头合力提振软件供应链和开源等安全...
  14. 【git体验】git原理及基础
  15. 【数据库】SQL建表
  16. 你们要的Android计算器,今天它来了~
  17. 松下电视切换html,松下等离子电视如何用HDMI连接电脑?
  18. Oracle定时任务DBMS_JOB
  19. English--动词时态
  20. 送抖音直播云挤地铁教程

热门文章

  1. 滤波器开发之三:基于算数平均的阶进平滑滤波器
  2. CoreAnimation编程指南(八)事务
  3. 现代软件工程 第十四章 【质量保障】 练习与讨论
  4. android 全局hook_【Hook】实现无清单启动Activity
  5. JAVA进阶教学之(String类的构造方法)
  6. httphost设置socks_socks5代理使用和安装配置
  7. Java并发编程以及并发须知的几个概念:什么是线程安全?
  8. python字典怎么添加值_python字典中如何添加键值对
  9. matlab zigzag算法,ZIGZAG扫描的MATLAB实现
  10. 完全弄懂C++中的构造与析构函数