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 相关文章推荐
JavaScript设置FieldSet展开与收缩
May 15 Javascript
基于jQuery的Tab选项框效果代码(插件)
Mar 01 Javascript
实现51Map地图接口(示例代码)
Nov 22 Javascript
Javascript基础教程之定义和调用函数
Jan 18 Javascript
jquery制作 随机弹跳的小球特效
Feb 01 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
Aug 22 Javascript
JavaScript实现轮播图效果代码实例
Sep 28 Javascript
vue使用swiper.js重叠轮播组建样式
Nov 14 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
Sep 05 Javascript
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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
详解Angular 自定义结构指令
2017/06/21 Javascript
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
python 实现红包随机生成算法的简单实例
2017/01/04 Python
python将ansible配置转为json格式实例代码
2017/05/15 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
如何基于python实现归一化处理
2020/01/20 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
计算机专业个人简短的自我评价
2013/10/23 职场文书
保险公司年会主持词
2014/03/22 职场文书
毕业生找工作求职信
2014/08/05 职场文书
4s店活动策划方案
2014/08/25 职场文书
个人廉洁自律总结
2015/03/06 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL