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 相关文章推荐
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
Apr 20 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
Apr 16 Javascript
用Javascript来生成ftp脚本的小例子
Jul 03 Javascript
浅谈Javascript 数组与字典
Jan 29 Javascript
JavaScript中的函数(二)
Dec 23 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
Feb 19 Javascript
JavaScript学习笔记之取数组中最大值和最小值
Mar 23 Javascript
Dojo获取下拉框的文本和值实例代码
May 27 Javascript
Jquery Easyui日历组件Calender使用详解(23)
Dec 18 Javascript
JS基于递归实现网页版计算器的方法分析
Dec 20 Javascript
微信小程序如何再次获取用户授权的方法
May 10 Javascript
layer ui 导入文件之前传入数据的实例
Sep 23 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
解析PHP中ob_start()函数的用法
2013/06/24 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
Python之变量类型和if判断方式
2020/05/05 Python
python将unicode和str互相转化的实现
2020/05/11 Python
Python中的With语句的使用及原理
2020/07/29 Python
python全栈开发语法总结
2020/11/22 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
学生请假条格式
2014/04/11 职场文书
软件项目开发计划书
2014/05/01 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
工作经验交流材料
2014/12/30 职场文书
留学推荐信怎么写
2015/03/26 职场文书
Redis唯一ID生成器的实现
2022/07/07 Redis