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

壹 ❀ 引言

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

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

7c01620068ac583222e82cbf43954e89.gif

贰 ❀ 实现思路

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

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

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

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

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

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

e3819f9ac415e2e93386f14af1b97f5f.png

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

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

0505b0041cb50531e3f0abfba43c8743.png

那么现在我们得到了判断楼层入画的条件,如果某个楼层的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的,所以就任性了。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

费尔马小定理素数java_利用费马小定理判断素数

今天听了ljss神犇的数论课&#xff0c;顿时感觉————我真的是太弱啦&#xff01;我只能稍微写一下我能听懂的部分orz那么这就是今天我为数不多能听懂一点的之一......QAQ首先先介绍今天的主角&#xff1a;费马小定理————转自维基百科没看懂的话我稍微解释一下&#xff0…

java aspectj_AspectJ基本用法

AOP虽然是方法论&#xff0c;但就好像OOP中的Java一样&#xff0c;一些先行者也开发了一套语言来支持AOP。目前用得比较火的就是AspectJ了&#xff0c;它是一种几乎和Java完全一样的语言&#xff0c;而且完全兼容Java(AspectJ应该就是一种扩展Java&#xff0c;但它不是像Groovy…

php json to object,PHP JSON_FORCE_OBJECT函数实现强转对象

JSON_FORCE_OBJECT在多级数组中&#xff0c;JSON_FORCE_OBJECT会将所有嵌套数值数组编码为对象。如果你只关注第一级数组(例如&#xff0c;使其适合作为MySQL JSON列)&#xff0c;那么可以将第一级数组强制转换为对象&#xff0c;例如&#xff1a;$ json json_encode((object)…

php推送示例wordpress,给WordPress的编辑后台添加提示框的代码实例分享

WordPress 3.5 新添加了一个提示框功能&#xff0c;可以创建一个提示框&#xff0c;然后指向任何元素&#xff0c;比如下边的例子&#xff1a;本文就来教你怎么创建一个这样的提示框。首先需要添加提示框的脚本&#xff0c;这样才能使用提示框的 JS 方法。//挂载提示框脚本func…

jmeter php网站,jmeter实战之phpwind随机回帖/发帖

关键词&#xff1a;jmeter phpwind 性能测试一、性能需求1)性能需求&#xff1a;30min内&#xff0c;phpwind随机回帖/发帖&#xff0c;观察服务器性能的表现。2)需求分析&#xff1a;2.1 核心业务论坛系统的核心业务主要是登录、看帖、发帖、回帖&#xff0c;业务建模时应考虑…

php7改进,关注一下:PHP 7.3.7 正式发布 改进、修复的地方不少哦

PHP 7.3.7正式发布了。PHP(PHP&#xff1a;Hypertext Preprocessor)是一种在电脑上执行的脚本语言&#xff0c;主要是用途在于处理动态网页&#xff0c;也包含了命令列执行接口(command line interface)&#xff0c;或者产生图形使用者接口(GUI)程式。版本主要还是修复 bug&…

php jwt token刷新方案,laravel JWT自动刷新 自定义验证器

在前面的文章中&#xff0c;我们引入了JWT的验证方式&#xff0c;但是在前面并没有做过多的处理&#xff0c;只是用JWT生成了一个token&#xff0c;那么今天来就解决后续问题为了保证用户信息的安全&#xff0c; 我们的生成的JWT不可能一直有效&#xff0c;我们在配置文件里边配…

2019java形势,2019Java开发还有哪些发展

相信已经有不少人在心里考虑着春节之后转行新工作了吧&#xff0c;而在众多行业中IT行业&#xff0c;特别是Java开发、Java程序员等岗位相信是很多人的首选。谁让现在程序员薪资这么高呢&#xff0c;但是现在互联网发展迅速&#xff0c;各类编程语言层出不穷&#xff0c;比如py…

mysql允许两个用户远程连接,配置MySQL服务允许用户远程连接

默认情况下&#xff0c;mysql只允许本地登录&#xff0c;如果要开启远程连接&#xff0c;则需要修改/etc/mysql/my.conf文件。一、修改/etc/mysql/my.conf找到bind-address 127.0.0.1这一行改为bind-address 0.0.0.0即可二、为需要远程登录的用户赋予权限1、新建用户远程连接…

php流程控制的类型有哪些,流程控制包括哪些内容

流程控制也称为控制流程&#xff0c;是计算机运算领域的用语&#xff0c;其内容包括在程序运行时&#xff0c;个别的指令或是陈述、子程序运行或求值的顺序&#xff0c;不论是在声明式编程语言或是函数编程语言中&#xff0c;都有类似的概念。控制流程(也称为流程控制)是计算机…

oracle11g创建闪回分区多大,Oracle闪回区大小预估

一个朋友问如何设置Oracle闪回区大小&#xff0c;有什么依据没有。查证官方文档&#xff0c;有如下描述For example, if you intend to setDB_FLASHBACK_RETENTION_TARGET to 24 hours, and if the database generates 20 GB of redo in a day, then a rule of thumb is to all…

查询linux服务器事物传输失败日志,查看fail2ban日志代替lastb查看登录失败记录

之前我曾经用shell脚本提取lastb登录失败超过指定次数的IP加入到iptables&#xff0c;来禁止这些IP登录主机&#xff0c;达到防止恶意攻击的目的。后来为了给主机提供更全面的防护&#xff0c;又安装了fail2ban。今天早上我收到fail2ban发过来的报警邮件提示我禁止了一个IP登录…

linux双屏播放视频,Ubuntu Linux下双屏显示解决方案

Ubuntu从起后居然把Windows的设置给记住了。显示ok。我晕。以前倒是也有过这问题&#xff0c;在双系统情况下&#xff0c;外接键盘的灯会继承Windows的早就有心弄个显示器&#xff0c;把笔记本的外接上&#xff0c;倒不是说非要2个屏幕来工作如何如何&#xff1f;只是因为我的本…

鸟哥linux群,【鸟哥的linux私房菜-学习笔记】linux的帐号与群组

linux的帐号与群组使用者标识符&#xff1a; UID 与 GIDID 与账号的对应就在 /etc/passwd 当中&#xff1b;计算机只认得ID(即数字)&#xff0c;并不能区别账号&#xff1b;每个登陆的使用者至少都会取得两个 ID &#xff0c;一个是使用者 ID (User ID &#xff0c;简称 UID)、…

C语言中表示温度符号,摄氏度符号怎么打(SCI论文中摄氏度°C符号的正确输法)...

大家可能知道中文的摄氏度百思特网是一个字符&#xff0c;而且输入方法比较简单&#xff0c;可以用搜狗输入法&#xff0c;还可以输入 "sheshidu"&#xff0c;第五个一般就是℃&#xff0c;甚至可以在网上或文献中复制粘贴。而英文的摄氏度C 却是两个字符&#xff0c…

android filehelper,为AndroidStudio开发mvp插件(MvpHelper)

如果觉得写mvp有点枯燥无味&#xff0c;我们可以做点 cool 的事情&#xff1a;做个 as 插件help.pngtodo-mvp: 基础的MVP架构。todo-mvp-loaders:基于MVP架构的实现&#xff0c;在获取数据的部分采用了loaders架构。todo-mvp-databinding: 基于MVP架构的实现&#xff0c;采用了…

android+5.q,MSM8909+Android5.1.1电池管理(2)--qpnp-linear-charger.txt驱动学习概要

MSM8909Android5.1.1电池管理(2)--qpnp-linear-charger.txt驱动学习概要参考文件\kernel\Documentation\power\qpnp-linear-charger.txt---下面是学习此文件\kernel\Documentation\devicetree\bindings\power\qpnp-linear-charger.txt1. 简介The QPNP linear charger drive…

岳阳鸿蒙数学培优阶梯训练,鸿蒙应用-呼吸训练app部分练习展示(开始)

本帖最后由 李洋水蛟龙 于 2020-12-20 18:11 编辑1.在主页面添加一个按钮并响应点击事件效果显示&#xff1a;图片1.png (404.17 KB, 下载次数: 0)2020-12-10 17:53 上传点击按钮“点我”下方便会显示“我被点击了”说明点击事件已完成代码如下&#xff1a;Index.hml文件中Hell…

android日期选择滚轮框架,GitHub - liwenzhi/wheelview: 滚轮效果的View,日期选择器

#wheelview滚动效果的View这段时间需要用到一个时间选择器&#xff0c;但是不能使用日期对话框&#xff0c;因为它是筛选条件框架下的&#xff0c;只能是View&#xff01;这个WheelView改造后可以达到要求&#xff01;这个wheelview框架使用的类不多&#xff0c;就几个&#xf…

大学计算机基础知识点图文,大学计算机基础知识点超详细总结

大学计算机基础知识点超详细总结 第一章 计算机及信息技术概述1. 电子计算机的发展历程①1946 年 2 月由宾夕法尼亚大学研制成功的 ENIAC 是世界上第一台电子数字计算机。 “诞生了一个电子的大脑” 致命缺陷&#xff1a;没有存储程序。②电子技术的发展促进了电子计算机的更新…