js实现页面导航层级指示效果


Posted in Javascript onAugust 25, 2020

我们上网经常看到一些页面层级指示的效果,比如淘宝、京东、百度百科等,用于指示用户浏览页面到哪里了。可以起到很好的交互效果,现在我们就来自己去实现以下类似的效果。主要用到的API是scrollIntoView 和 getBoundingClientRect方法,原理是监听页面滚动元素,当元素距离到浏览器视口一定的位置的时候就证明元素开始出现在页面的视口,就可以标识右边的指示栏。

js实现页面导航层级指示效果

代码如下:

<!DOCTYPE html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>H5 canvas绘制框选截图和保存截图代码</title>
 <style>
 *{padding:0;margin:0;}
 #scrollBox{margin:0 auto;width:1000px;}
 #scrollBox .scroll-tips{position:fixed;right:10px;top:300px;width:100px;}
 #scrollBox .scroll-tips li {cursor:pointer;text-align:center;}
 #scrollBox .scroll-tips li.active {background:#ccc;}
 #scrollBox .ct {height: 550px;line-height:550px;text-align:center;font-size:40px;color:#fff;background:green;}
 </style>
</head>
<body>
 <div id="scrollBox">
 <div class="main">
  <div class="content">
  <h2 id="title1" class="title-bar" data-id="1">标题1</h2>
  <div class="ct">内容1</div>
  </div>
  <div class="content">
  <h2 id="title2" class="title-bar" data-id="2">标题2</h2>
  <div class="ct" style="height:847px;">内容2</div>
  </div>
  <div class="content">
  <h2 id="title3" class="title-bar" data-id="3">标题3</h2>
  <div class="ct" style="height:547px;">内容3</div>
  </div>
  <div class="content">
  <h2 id="title4" class="title-bar" data-id="4">标题4</h2>
  <div class="ct" style="height:427px;">内容4</div>
  </div>
  <div class="content">
  <h2 id="title5" class="title-bar" data-id="5">标题5</h2>
  <div class="ct" style="height:187px;">内容5</div>
  </div>
  <div class="content">
  <h2 id="title6" class="title-bar" data-id="6">标题6</h2>
  <div class="ct" style="height:232px;">内容6</div>
  </div>
 </div>
 <div class="scroll-tips">
  <ul>
  <li id="Li1" class="active" data-id="1">标题1</li>
  <li id="Li2" data-id="2">标题2</li>
  <li id="Li3" data-id="3">标题3</li>
  <li id="Li4" data-id="4">标题4</li>
  <li id="Li5" data-id="5">标题5</li>
  <li id="Li6" data-id="6">标题6</li>
  </ul>
 </div>
 </div>
 <script>
 let Li = $$('.scroll-tips li');
 let scrollTips = $$('.title-bar');
 function $$(str) {
  return document.querySelectorAll(str);
 };
 for (let i = 0, len = Li.length; i < len; i++) {
  // 点击右侧标识点左侧滚动到窗口显示位置
  Li[i].onclick = function () {
  let id = this.getAttribute('data-id');
  $$('.scroll-tips li.active')[0].classList.remove('active');
  this.classList.add('active');
  $$('#title' + id)[0].scrollIntoView();
  };
 };
 // 获取当前页面滚动到浏览器视口顶部位置的元素
 const getScrollTop = function (domArr) {
  for (let i = 0, len = domArr.length; i < len; i++) {
  let top = domArr[i].getBoundingClientRect().top;
  // 表示在一定范围内允许的值
  if (top >= 0 && top <= 30) {
   return domArr[i];
  }
  }
 };
 // 监听滚动方法
 window.onscroll = function () {
  let LiId = getScrollTop(scrollTips) && getScrollTop(scrollTips).getAttribute('data-id');
  if (LiId) {
  $$('.scroll-tips li.active')[0].classList.remove('active');
  $$('#Li' + LiId)[0].classList.add('active');
  }
 };
 </script>
</body>
</html>

运行结果如下:

js实现页面导航层级指示效果

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

Javascript 相关文章推荐
jquery mobile changepage的三种传参方法介绍
Sep 13 Javascript
toggle()隐藏问题的解决方法
Feb 17 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
Jun 03 Javascript
一段非常简单的js判断浏览器的内核
Aug 17 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
HTML5 js实现拖拉上传文件功能
Nov 20 Javascript
vue.js父组件使用外部对象的方法示例
Apr 25 Javascript
bootstrap confirmation按钮提示组件使用详解
Aug 22 Javascript
JS实现的tab切换并显示相应内容模块功能示例
Aug 03 Javascript
微信公众号生成新浪短网址的实现(快速生成)
Aug 18 Javascript
使用typescript快速开发一个cli的实现示例
Dec 09 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
js实现拖拽元素选择和删除
Aug 25 #Javascript
基于vue实现简易打地鼠游戏
Aug 21 #Javascript
vue实现打地鼠小游戏
Aug 21 #Javascript
js实现滑动进度条效果
Aug 21 #Javascript
探索浏览器页面关闭window.close()的使用详解
Aug 21 #Javascript
vue组件开发之tab切换组件使用详解
Aug 21 #Javascript
vue组件开发之slider组件使用详解
Aug 21 #Javascript
You might like
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
用文本作数据处理
2006/10/09 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
Python实现图片拼接的代码
2018/07/02 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
python实现简单成绩录入系统
2019/09/19 Python
Python pip配置国内源的方法
2020/02/14 Python
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
如何手工释放资源
2013/12/15 面试题
大学新生军训感言
2014/02/25 职场文书
车辆转让协议书
2014/04/15 职场文书
期末学生评语大全
2014/04/24 职场文书
文明市民先进事迹
2014/05/15 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
设备技术员岗位职责
2015/04/11 职场文书
政府会议通知范文
2015/04/15 职场文书
公司开除员工通知
2015/04/22 职场文书
实习证明模板
2015/06/16 职场文书
特种设备安全管理制度
2015/08/06 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
小程序wx.getUserProfile接口的具体使用
2021/06/02 Javascript
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL