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 定义初始化数组函数
Sep 07 Javascript
JavaScript Timer实现代码
Feb 17 Javascript
jQuery实现的多选框多级联动插件
May 02 Javascript
VS2008中使用JavaScript调用WebServices
Dec 18 Javascript
Javascript基础教程之数据类型 (字符串 String)
Jan 18 Javascript
jQuery定义背景动态切换效果的方法
Mar 23 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
May 12 Javascript
详解如何使用webpack+es6开发angular1.x
Aug 16 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
Feb 22 Javascript
jquery-ui 进度条功能示例【测试可用】
Jul 25 jQuery
小程序识别身份证,银行卡,营业执照,驾照的实现
Nov 05 Javascript
原生js+canvas实现验证码
Nov 29 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
长波知识介绍
2021/03/01 无线电
深入PHP5中的魔术方法详解
2013/06/17 PHP
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
xtree.js 代码
2007/03/13 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
2020/06/29 Python
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
开工典礼策划方案
2014/05/23 职场文书
伊琍体标语
2014/06/25 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android