Javascript实现页面滚动时导航智能定位


Posted in Javascript onMay 06, 2017

常见的开发页面中可能会有这么一个需求,页面中会有多个模块,每个模块对应一个导航,当页面滚动到某个模块时,对应的模块导航需要加上一个类用于区分当前用户所浏览区域。

假设结构如下:

<div class="container">
  <div class="wrapper">
    <div class="section" id="section1">section1</div>
    <div class="section" id="section2">section2</div>
    <div class="section" id="section3">section3</div>
    <div class="section" id="section4">section4</div>
    <div class="section" id="section5">section5</div>
  </div>
  <nav>
    <a href="#section1" rel="external nofollow" class="current">section1</a>
    <a href="#section2" rel="external nofollow" >section2</a>
    <a href="#section3" rel="external nofollow" >section3</a>
    <a href="#section4" rel="external nofollow" >section4</a>
    <a href="#section5" rel="external nofollow" >section5</a>
  </nav>
</div>

页面滚动时导航定位

js代码如下:

var $navs = $('nav a'),          // 导航
  $sections = $('.section'),       // 模块
  $window = $(window),
  navLength = $navs.length - 1;
  
$window.on('scroll', function() {
  var scrollTop = $window.scrollTop(),
    len = navLength;

  for (; len > -1; len--) {
    var that = $sections.eq(len);
    if (scrollTop >= that.offset().top) {
       $navs.removeClass('current').eq(len).addClass('current');
       break;
    }
  }
});

效果如下:

Javascript实现页面滚动时导航智能定位

不难看出,基本原理就是在window滚动的时候,依次将模块从后向前遍历,如果window的滚动高度大于或等于当前模块的距页面顶部的距离,则将当前模块对应的导航突出显示,并且不再继续遍历

点击导航定位页面

除了这种需求外,还有另一种需求,就是点击导航定位到导航所对应模块的顶部。

代码如下:

$navs.on('click', function(e) {
  e.preventDefault();
  $('html, body').animate({
    'scrollTop': $($(this).attr('href')).offset().top
  }, 400);
});

效果如下:

Javascript实现页面滚动时导航智能定位

以上基本上满足了业务的基本需求,这是工作中总结的经验,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
硬盘浏览程序,保存成网页格式便可使用
Dec 03 Javascript
JS 继承实例分析
Nov 04 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
Nov 07 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
Apr 06 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
Feb 23 Javascript
mui框架移动开发初体验详解
Oct 11 Javascript
webpack引入eslint配置详解
Jan 22 Javascript
微信小程序版翻牌小游戏
Jan 26 Javascript
对angular4子路由&amp;辅助路由详解
Oct 09 Javascript
Vuex中的State使用介绍
Jan 19 Javascript
使用Vue 实现滑动验证码功能
Jun 27 Javascript
vue实现移动端触屏拖拽功能
Aug 21 Javascript
JavaScript实现打地鼠小游戏
Apr 23 #Javascript
简单实现jQuery弹幕效果
May 06 #jQuery
javascript编写简易计算器
May 06 #Javascript
JavaScript实现无穷滚动加载数据
May 06 #Javascript
Angularjs2不同组件间的通信实例代码
May 06 #Javascript
jquery实现提示语淡入效果
May 05 #jQuery
Jquery获取radio选中的值
May 05 #jQuery
You might like
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
在python image 中实现安装中文字体
2020/05/16 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
scrapy-splash简单使用详解
2021/02/21 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
数控专业应届生求职信
2013/11/27 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
质量保证书格式
2015/02/27 职场文书
工作能力自我评价2015
2015/03/05 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python