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 相关文章推荐
JS提交并解析后台返回的XML的代码
Nov 03 Javascript
不一样的文字闪烁 轮番闪烁
Nov 11 Javascript
页面右下角弹出提示框示例代码js版
Aug 02 Javascript
使用jQuery动态加载js脚本文件的方法
Apr 03 Javascript
一个JavaScript操作元素定位元素的实例
Oct 29 Javascript
详解JavaScript RegExp对象
Feb 04 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 Javascript
Vue项目自动转换 px 为 rem的实现方法
Oct 29 Javascript
js简单遍历获取对象中的属性值的方法示例
Jun 19 Javascript
详解Vue 换肤方案验证
Aug 28 Javascript
JavaScript实时更新当前的时间的示例代码
Jul 15 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
ADODB的数据库封包程序库
2006/12/31 PHP
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
PHP计数器的实现代码
2013/06/08 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
JS焦点图切换,上下翻转
2011/05/12 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
从零学Python之hello world
2014/05/21 Python
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
Python实现异步IO的示例
2020/11/05 Python
golang 生成对应的数据表struct定义操作
2021/04/28 Golang