使用JavaScript实现楼层导航的方法及过程是什么
Admin 2022-06-24 群英技术资讯 566 次浏览
<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>
<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>
点击左侧菜单中的楼层按钮对应跳转到相应的楼层。
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; } }
楼层监听,页面卷动时,左侧菜单中的楼层栏目背景随之变化。
// 页面卷动时,左侧盒子栏目背景随之变化 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 = ''; } } } }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Promise与Async/await函数都是用来解决JavaScript中的异步问题的,那么它们之间有什么区别吗?下面本篇文章就来给大家介绍一下Promise、Generator和Async间的差异,希望对大家有所帮助!
最在做项目过程中,大量的使用了Object.assign方法,发现这个还是挺好使用的,现在总结下Object.assign的基本使用。一、基本语法Object.assign(target, ...sources)二、基本概念O
盲猜一个:如果你有看过《medium 五万赞好文-《我永远不懂 JS 闭包》》你一定会对 JS 的【函数】有更多兴趣!皮一下,很舒服~ 没错!JS 就是轻量级的函数式编程!拆解一下这句话,品味一下~本瓜将借助《JavaScript 轻量级函数式编程》一书带领你先透析它的落脚点函数式编程,然后再看看 JS 为什么被称为是
这篇文章主要给大家介绍关于JS函数的柯里化的内容,对于柯里化的定义、使用、柯里化通用式等内容,本文都有详细的介绍,另外下文还给大家补充了函数的隐式转换和利用call/apply封数组的map方法的相关知识,感兴趣的朋友就继续往下看吧。
本文给大家分享用vue怎样做拖拽排序的功能,小编觉得比较实用,因此分享给大家做个参考,实现效果及代码如下,这里提供一种简单的实现方案,感兴趣的朋友可以了解看看。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008