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实现的类似Google的Div拖动效果代码
Aug 09 Javascript
移动端JQ插件hammer使用详解
Jul 03 Javascript
js实现简单排列组合的方法
Jan 27 Javascript
Websocket协议详解及简单实例代码
Dec 12 Javascript
巧用canvas
Jan 21 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
Apr 12 Javascript
微信小程序登录态控制深入分析
Apr 12 Javascript
用最少的JS代码写出贪吃蛇游戏
Jan 12 Javascript
利用vue和element-ui设置表格内容分页的实例
Mar 02 Javascript
Vue cli构建及项目打包以及出现的问题解决
Aug 27 Javascript
vue 内联样式style中的background用法说明
Aug 05 Javascript
15个值得收藏的JavaScript函数
Sep 15 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
解析PHP 5.5 新特性
2013/07/02 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
php生成rss类用法实例
2015/04/14 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
php无限极分类实现方法分析
2019/07/04 PHP
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
js实现旋转木马效果
2017/03/17 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
详解react-redux插件入门
2018/04/19 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
在Python中使用模块的教程
2015/04/27 Python
python处理html转义字符的方法详解
2016/07/01 Python
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
python机器学习之神经网络(一)
2017/12/20 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
总结表彰大会主持词
2014/03/26 职场文书
庐山导游词
2015/02/03 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
小学美术教学反思
2016/02/17 职场文书